File: ATAN.RA of Disk: V50/Source/Source-Listing-RALF-1
(Source file text)
/R=ATAN(R) SINGLE PREC. ARC-TANGENT / / / VERSION 50A 20-MAY-80 WVDM / / SECT ATAN JA #ATAN TEXT +ATAN + ATANXR, SETX XRATAN SETB BPATAN BPATAN, F 0.0 XRATAN, F 0.0 ATAN1, F 0.0 ATAN2, F 0.0 ATAN3, F 0.0 P2ATAN, F 1.5707963 /= PI/2 F1ATAN, F 1. M4ATAN, F -4. ORG 10*3+BPATAN FNOP JA ATANXR 0 ATNRTN, JA . / ATANC1, -15 /LOWER LIMIT TEST. 2000 0000 / ATANC3, -1 /.26794916 = 2.-SQRT(3) = TAN(PI/12) 2111 4121 / ATANC4, 1 /1.7320509 = SQRT(3) 3355 4754 / ATANC5, 0 /.52359879 = PI/6 = ATAN(1/SQRT(3)) 2060 2511 / ATANC6, -3 /TCHEBYCHEFF-COEFFS 1/9 3023 1227 / ATANC7, -2 /-1/7 APPROX 5566 7220 / ATANC8, -2 /1/5 APPROX 3146 0740 / ATANC9, -1 /-1/3 APPROX 5252 5262 / BASE 0 #ATAN, STARTD FLDA 10*3 FSTA ATNRTN FLDA 0 SETX XRATAN SETB BPATAN BASE BPATAN LDX 1,1 FSTA BPATAN FLDA% BPATAN,1 /ADDR OF X FSTA BPATAN STARTF FLDA% BPATAN /GET X LDX -1,0 /REMEMBER SIGN JGE ATNPOS LDX 0,0 /SAVE THE SIGN. FNEG /NEGATE THE FAC [ABS] ATNPOS, FSTA ATAN1 /AND STORE AWAY. FSUB F1ATAN /TEST TO SEE IF TOO BIG. JLE ATNNRM /IT ISNT. LDX 0,1 /XR 1 WAS 1. REMEMBER PI/2-PI/4 FLDA F1ATAN /TO BIG. INVERT IT. FDIV ATAN1 FSTA ATAN1 ATNNRM, FLDA ATAN1 FSUB ATANC1 /TEST TO SEE IF TOO SMALL. JLE ATNSML /IT IS. ATAN(X)=X / FCLA /CLEAR OUT TEMP. FSTA ATAN2 FLDA ATAN1 /RECALL NUMBER. FSUB ATANC3 /IS X.GT.TAN(PI/12) ? JLT ATANNT /NO, CALCULATE IN 0-PI/12 SECTOR FLDA ATANC4 /YES, REDUCE PI/12-PI/4 SECTOR FADD ATAN1 /TO CALCULATE IN 0-PI/12 FSTA ATAN1 /X:=SQRT(3)+X FLDA M4ATAN /X:=[-4./(SQRT(3)+X)]+SQRT(3) FDIV ATAN1 /GENERAL RELATION IS: FADD ATANC4 /ATAN(X)=ATAN[(X+A)/(1-XA)]-ATAN(A) FSTA ATAN1 /HERE A=-1/SQRT(3) FLDA ATANC5 /NOW SET TEMP TO POST-FACTOR FSTA ATAN2 /OF PI/6 = ATAN(1/SQRT(3)) / ATANNT, FLDA ATAN1 /RECALL AND SQUARE IT. FMUL ATAN1 FSTA ATAN3 /YET ANOTHER TEMP. FLDA ATANC6 FMUL ATAN3 FADD ATANC7 FMUL ATAN3 FADD ATANC8 FMUL ATAN3 FADD ATANC9 FMUL ATAN3 FADD F1ATAN /THIS CALCULATED: FMUL ATAN1 /ATAN(X)=X-X^3/3+X^5/5-X^7/7+X^9/9. FADD ATAN2 /ADD POST-OFFSET IF ANY FSTA ATAN1 ATNTQU, JXN ATNTNG,1 /WAS IT 0-PI/4 RANGE ? FLDA P2ATAN /NO, ATAN(X)=PI/2-ATAN(X) FSUB ATAN1 ATNTNG, JXN ATNRTN,0 /WAS X NEG ? FNEG /YES, ATAN(-X)=-ATAN(X) JA ATNRTN /RETURN WITH VALUE / ATNSML, FLDA ATAN1 /FOR X.LT.1E-5, ATAN(X)=X JA ATNTQU