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