File: DATAN.RA of Tape: Sources/Fortran/os8-f4-3
(Source file text) 

/D=DATAN(D) DOUBLE PREC. ARC-TANGENT
/
/
/ VERSION 40A 28-MAY-80 WVDM
/
/
/X,THE ARGUMENT, IS REDUCED TO 
/0<X<1/2
/BY THE IDENTITIES:
/ATAN(-X)=-ATAN(X)
/IF X>1.0 THEN ATAN(X)=PI/2 - ATAN(1/X)
/IF .5<X<1.0 THEN ATAN(X)=ATAN(1/2)+ATAN(2*X-(1/(X+2)))
/ATAN(X)=X FOR X<2^(-15)
/
	SECT	DATAN
	JA	#DATAN
	DPCHK
	TEXT	+DATAN +
DATNXR,	SETX 	XRDATN
	SETB	BPDATN
BPDATN,	F 0.0
XRDATN,	F 0.0
DATFP1,	F 1.0
	F 0.0
DATLOW,	-15
	2000
	0000
	0000
	0000
	0000
	ORG	10*3+BPDATN
	FNOP
	JA	DATNXR
	0
DATRTN,	JA	.
/
LAMBDA,	0004
	3057
	7537
	4017
	0276
	4536
/
DATB0,	0005
	3221
	3522
	3121
	3352
	5066
/
DATA1,	0007
	5372
	4104
	3437
	1766
	6167
/
DATB1,	0003
	3135
	1757
	0565
	4141
	4270
/
DATA2,	0001
	5473
	7524
	1112
	4701
	2723
/
DATB2,	0002
	2065
	4070
	1015
	2710
	3176
/
DATA3,	7775
	5374
	4326
	3317
	1675
	3124
/
DATB3,	0001
	2410
	5255
	0370
	2076
	6374
/
PIS2,	0001
	3110
	3755
	2421
	0264
	3013
/
ATN1S2,	7777
	3553
	0634
	0530
	3443
	6406
/
DATP5,	7777
	3777
	7777
	7777
	7777
	7776
/
X,	F 0.0
	F 0.0
/
C0,	F 0.0
	F 0.0
/
DT1,	F 0.0
	F 0.0
/
DATFP2,	F 2.0
	F 0.0
/
Z,	F 0.0
	F 0.0
/
	BASE	0
#DATAN,	STARTD			/PICK UP RETURN AND ARGUMENT
	FLDA	10*3
	FSTA	DATRTN
	FLDA	0
	SETX	XRDATN
	SETB	BPDATN
	BASE	BPDATN
	LDX	1,1
	FSTA	BPDATN
	FLDA%	BPDATN,1
	FSTA	BPDATN
	STARTE
	FLDA%	BPDATN		/GET X
	LDX	-1,0		/SIGN
	JGE	.+5
	LDX	0,0		/SAVE SIGN
	FNEG
	FSTA	X		/SAVE ARG
	FLDA	X		/CHECK AGAINST LOWER LIMIT
	FSUB	DATLOW		/TOO SMALL?
	JLE	DATGO		/YES ATAN(X)=X
	LDX	-1,1
	FCLA
	FSTA	C0
DATA,	FLDA	X		/REDUCE X TO RANGE 0<X<.5
	FSUB	DATFP1	
	JLE	DATB		/>1?
	FLDA	DATFP1		/YES
	FDIV	X		/X=1/X
	LDX	0,1		/SET FLAG
	FSTA	X
DATB,	FLDA	X
	FSUB	DATP5		/>= .5
	JLT	DATC
	FLDA	X		/X=(2X-1)/(X+2)
	FADD	DATFP2
	FSTA	DT1		/TEMP
	FLDA	X
	FMUL	DATFP2
	FSUB	DATFP1
	FDIV	DT1
	FSTA	X
	FLDA	ATN1S2		/C0=ATAN(1/2)
	FSTA	C0
DATC,	FLDA	X		/COMPUTE ATAN USING ALGORITHM
	FMUL	X
	FSTA	Z		/Z=X*X
	FLDA	Z
	FADD	DATB3		/Z+B3
	FSTA	DT1
	FLDA	DATA3
	FDIV	DT1		/A3/(Z+B3)
	FADD	DATB2
	FADD	Z		/ADD Z+B2
	FSTA	DT1		/TEMP
	FLDA	DATA2		/A2/TEMP
	FDIV	DT1
	FADD	DATB1
	FADD	Z		/ADD Z +B1
	FSTA	DT1		/TEMP
	FLDA	DATA1		/A1/TEMP
	FDIV	DT1
	FADD	DATB0		/ADD Z+B0
	FADD	Z
	FSTA	DT1
	FLDA	LAMBDA		/LAMBDA*X
	FMUL	X
	FDIV	DT1		/DIV BY THE REST
	FADD	C0
	FSTA	X
	JXN	DATD,1		/WAS X>1 ORIGINALLY?
	FLDA	PIS2		/Y ATAN(X)=PI/2-ATAN(X)
	FSUB	X
DATD,	JXN	DATRTN,0	/WAS X<0?
	FNEG			/YES
	JA	DATRTN
/
DATGO,	FLDA	X
	JA	DATD