       .TITLE .DD    COMPUTE ARCTANGENT FOR ARG IN FLOATING ACCUMULATOR
/COPYRIGHT 1970, DIGITAL EQUIPMENT CORP., MAYNARD, MASS.
/EDIT 2   10-22-70
       .GLOBL .DD,.AA,.AB,.AV,.AU,.DC,.DB,.AP,.AO,.AR,.AS,.AQ,.AT
/             CALLING SEQUENCE          (DOUBLE PRECISION)
/      JMS*   (.DD)           SUBR CALL (ARG IN FLOAT ACC)
/      NEXT   INSTRUCTION     SUBR RETURN (RESULT IN FLOAT ACC)
/
.DD    CAL    0              /ENTRY-EXIT
       LAC*   .AB            /GET SIGN WORD (.AB)
       DAC    ARCT02         /SAVE AS ANS SIGN
       AND    ARCT03         /STRIP SIGN
       DAC*   .AB            /RESTORE IN (.AB)
       LAC*   .AA            /GET EXPONENT (.AA)
       DAC    ARCT05         /SAVE FOR LATER TEST
       SNA!SPA               /IF EXP .GT. ZE96 (ARG .GT. 1) TAKE 1/ARG
       JMP    ARCT06         /OR SKIP TO POLY EVALUATE
       JMS*   .AV            /REVERSE DIVIDE DOUBLE (.AV)
       .DSA   ARCT08         / (1/ARG)
ARCT06	JMS* .AP	/SAVE ARGUMENT
	.DSA ARCT20
	JMS* .DC	/POLYNOMIAL EVALUATE (.DC)
	.DSA ARCT11	/(FWA OF CALLING SEQUENCE)
	JMS* .AP	/SAVE INTERMEDIATE ANGLE
	.DSA ARCT21
	JMS* .DB	/CALCULATE TANGENT OF INTERMEDIATE ANGLE
	JMS* .AP	/TAN (A)=SIN (A)/SIN ((PI/2)-A)
	.DSA ARCT22
	JMS* .AO
	.DSA ARCT14
	JMS* .AR
	.DSA ARCT21
	JMS* .DB
	JMS* .AV
	.DSA ARCT22
	JMS* .AP	/SAVE TANGENT OF INTERMEDIATE ANGLE
	.DSA ARCT22
	JMS* .AS	/CALCULATE CORRECTION ANGLE TO BRING
	.DSA ARCT20	/INTERMEDIATE ANGLE TO DESIRED ACCURACY
	JMS* .AQ	/C.A.=(ARG-TAN(A))/(1+ARG*TAN(A))
	.DSA ARCT08
	JMS* .AP
	.DSA ARCT24
	JMS* .AO
	.DSA ARCT20
	JMS* .AR
	.DSA ARCT22
	JMS* .AT	/C.A. NOW IN FLOATING AC
	.DSA ARCT24
	JMS* .AQ	/ADD INTERMEDIATE ANGLE TO CORRECTION
	.DSA ARCT21	/ANGLE TO GET FINAL ANGLE
       LAC    ARCT05         /TEST ARG AGAIN IF .GT. 1 (EXP .GT. 0)
       SNA!SPA               / (EXP POSITIVE AND NON-ZERO)
       JMP    ARCT12         /IS NOT .GT. 1, SKIP
       JMS*   .AU            /REVERSE SUBTRACT DOUBLE (.AU)
       .DSA   ARCT14         / (PI/2-ANS)
ARCT12 LAC    ARCT02         /GET ORIGINAL SIGN WORD
       AND    ARCT09         /KEEP B0 ONLY
       XOR*   .AB            /SET SIGN WORD WITH NEW SIGN (.AB)
	SAD ARCT09		/CHECK FOR -0.0 CASE
	CLA		/YES.  MAKE -0.0 A 0.0
       DAC*   .AB            /RESTORE SIGN WORD (.AB)
       JMP*   .DD            /EXIT
ARCT02 CAL    0              /ANS SIGN
ARCT03        377777
ARCT05 CAL    0              /EXP STORAGE
ARCT08        1              /FLOATING 1 (1)
              200000         /           (2)
              0              /           (3)
ARCT09        400000
ARCT14        1              / PI/2 (1)  (1.57079632679)
              311037         /      (2)
              552420         /      (3)
ARCT20 .BLOCK 3         /TEMP STORAGE
ARCT21 .BLOCK 3
ARCT22 .BLOCK 3
ARCT24 .BLOCK 3
ARCT11        777775         / -N+1 (NO OF COEFFICIENTS) (4)
       777774; 637556; 023444 /-0.389929D-1
       777776; 225623; 041646 /0.1462766D0
       777777; 644343; 720712 /-0.3211819D0
       000000; 377631; 067426 /0.9992150D0
       .END
