; ; CFLOAT - FLOATING POINT STUFF ; ; This file is PDP-10 dependent, system-independent. ; TITLE CFLOAT .INSRT SS:CINSRT .INSRT SS:MINSRT ; CONTAINS: LOG, EXP, COS, SIN, ATAN, SQRT, DTRUNCATE, DROUND, DABS CENTRY LOG,[V] MOVE B,V JUMPLE B,OUTRNG LDB D,[331100,,B] ;GRAB EXPONENT SUBI D,201 ;REMOVE BIAS TLZ B,777000 ;SET EXPONENT TLO B,201000 ; TO 1 MOVE A,B FSBR A,SQRT2 FADR B,SQRT2 FDVB A,B FMPR B,B MOVE C,[0.434259751] FMPR C,B FADR C,[0.576584342] FMPR C,B FADR C,[0.961800762] FMPR C,B FADR C,[2.88539007] FMPR C,A FADR C,[0.5] MOVE B,D FSC B,233 FADR B,C FMPR B,[0.693147180] ;LOG E OF 2 MOVE A,B RETURN CENTRY EXP,[V] MOVE B,V PUSH P,B MOVM A,B SETZM B FMPR A,[0.434294481] ;LOG BASE 10 OF E MOVE D,[1.0] CAMG A,D GO RATEX MULI A,400 ASHC B,-243(A) CAILE B,43 GO OUTRNG CAILE B,7 GO EXPR2 EXPR1: FMPR D,FLOAP1(B) LDB A,[103300,,C] CAIE A,0 TLO A,177000 FADR A,A RATEX: MOVEI B,7 SETZM C RATEY: FADR C,COEF2-1(B) FMPR C,A SOJN B,RATEY FADR C,[1.0] FMPR C,C FMPR D,C MOVE B,[1.0] SKIPL (P) ;SKIP IF INPUT NEGATIVE SKIPN B,D FDVR B,D MOVE A,B RETURN EXPR2: LDB D,[030300,,B] ANDI B,7 MOVE D,FLOAP1(D) FMPR D,D ;TO THE 8TH POWER FMPR D,D FMPR D,D GO EXPR1 COEF2: 1.15129278 0.662730884 0.254393575 0.0729517367 0.0174211199 2.55491796^-3 9.3264267^-4 FLOAP1: 1.0 10.0 100.0 1000.0 10000.0 100000.0 1000000.0 10000000.0 OUTRNG: CROAK [ARGUMENT OUT OF RANGE] GO RTN1 CENTRY COS,[V] MOVE B,V FADR B,[1.570796326] ;COS(X)=SIN (X+PI/2) CALL SIN,[B] RTN1: RETURN CENTRY SIN,[V] MOVE B,V PUSHJ P,.SIN RETURN .SIN: MOVM A,B CAMG A,[.0001] POPJ P, ;GOSPER'S RECURSIVE SIN. FDVR B,[-3.0] ;SIN(X)=4*SIN(X/-3)**3-3*SIN(X/-3) PUSHJ P,.SIN FSC A,1 FMPR A,A FADR A,[-3.0] FMPRB A,B POPJ P, CENTRY SQRT,[V] MOVE B,V MOVE A,B ASH B,-1 FSC B,100 SQ2: MOVE C,B ;NEWTON'S METHOD, SPECINER'S HACK. FDVRM A,B FADRM C,B FSC B,-1 CAME C,B GO SQ2 MOVE A,B RETURN CENTRY ATAN,[V],[TEMP] MOVE B,V MOVEM B,TEMP MOVM D,B CAMG D,[0.4^-8] ;SMALL ENOUGH SO ATAN(X)=X? GO ATAN3 ;YES CAML D,[7.0^7] ;LARGE ENOUGH SO THAT ATAN(X)=PI/2? GO ATAN1 ;YES MOVN C,[1.0] CAMLE D,[1.0] ;IS ABS(X)<1.0? FDVM C,D ;NO,SCALE IT DOWN MOVE B,D FMPR B,B MOVE C,[1.44863154] FADR C,B MOVE A,[-0.264768620] FDVM A,C FADR C,B FADR C,[3.31633543] MOVE A,[-7.10676005] FDVM A,C FADR C,B FADR C,[6.76213924] MOVE B,[3.70925626] FDVR B,C FADR B,[0.174655439] FMPR B,D JUMPG D,ATAN2 ;WAS ARG SCALED? FADR B,PI2 ;YES, ATAN(X)=PI/2-ATAN(1/X) GO ATAN2 ATAN1: MOVE B,PI2 ATAN2: SKIPGE TEMP ;WAS INPUT NEGATIVE? MOVNS B ;YES,COMPLEMENT ATAN3: MOVE A,B RETURN SQRT2: 1.41421356 PI2: 3.1415926535/2 CENTRY DROUND,[V] MOVM A,V FADR A,[.499999] FIX A,A SKIPGE V MOVN A,A RETURN CENTRY DTRUNCATE,[V] FIX A,V RETURN CENTRY DABS,[V] MOVE A,V JUMPGE A,RET MOVN A,A JUMPGE A,RET TLZ A,400000 RET: RETURN END