.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