.TITLE ATAN2 ARCTANGENT FOR REAL ARGUMENTS (ATAN(A1/A2)) / / / FIRST PRINTING, FEBRUARY 1974 / / THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO / CHANGE WITHOUT NOTICE AND SHOULD NOT BE CONSTRUED / AS A COMMITMENT BY DIGITAL EQUIPMENT CORPORATION. / DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPON- / SIBILITY FOR ANY ERRORS THAT MAY APPEAR IN THIS / DOCUMENT. / / THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FUR- / NISHED TO THE PURCHASER UNDER A LICENSE FOR USE ON / A SINGLE COMPUTER SYSTEM AND CAN BE COPIED (WITH / INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR / USE IN SUCH SYSTEM, EXCEPT AS MAY OTHERWISE BE PRO- / VIDED IN WRITING BY DIGITAL. / / DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY / FOR THE USE OR RELIABILITY OF ITS SOFTWARE ON EQUIP- / MENT THAT IS NOT SUPPLIED BY DIGITAL. / / COPYRIGHT (C) 1974, BY DIGITAL EQUIPMENT CORPORATION / / .EJECT /COPYRIGHT 1973 DIGITAL EQUIPMENT CORP., MAYNARD, MASS. /EDIT #8 25 MAY 73 T.A. MURRAY / /FOR HARDWARE FPP VERSION, DEFINE %FPP=0 / .GLOBL ATAN2,.DA,.ED,.ER / .IFUND %FPP / .GLOBL .AB,.AG,.AL,.AI,.AJ / .DEFIN FLD% /FLOATING LOAD (.AG) JMS* .AG .ENDM .DEFIN FDV% /FLOATING DIVIDE (.AL) JMS* .AL .ENDM .DEFIN FAD% /FLOATING ADD (.AI) JMS* .AI .ENDM .DEFIN FSB% /FLOATING SUBTRACT (.AJ) JMS* .AJ .ENDM / .ENDC / / .IFDEF %FPP / BPA=716604 BMA=716602 BZA=716601 BNA=716610 / FLD=713050 .DEFIN FLD% /FPP FLOATING LOAD FLD .ENDM FDV=712040 .DEFIN FDV% /FPP FLOATING DIVIDE FDV .ENDM FAD=716040 .DEFIN FAD% /FPP FLOATING ADD FAD .ENDM FSB=710440 .DEFIN FSB% /FPP FLOATING SUBTRACT FSB .ENDM / .ENDC /CALLING SEQUENCE / JMS* ATAN2 / JMP .+3 RETURN POINT / .DSA ARG1[+400000] ADDR OR ARG 1 / .DSA ARG2[+400000] ADDR OF ARG 2 / / ATAN2 0 /ENTRY POINT JMS* .DA /SET UP ARGUMENT ADDRESSES JMP ATN203 /JUMP AROUND ARGUMENT LIST ATN201 0 /ARG 1 ATN202 0 /ARG 2 / ATN203 FLD% /LOAD ARGUMENT 1 .DSA ATN201+400000 LAC ATN202 /BEFORE PROCEEDING, CHECK IF THE DENOMINATOR OF DAC ATN205 /RATIO ARG1/ARG2 IS ZERO. CHECK THE MOST SIG- ISZ ATN205 /NIFICANT BITS OF ARG2 LAC* ATN205 SZA JMP ATN206 /(ARG2 NOT ZERO) .IFUND %FPP /WHEN ARG2 IS ZERO, THE VALUE PI/2 IS RETURNED LAC* .AB /IF ARG1 IS POSITIVE, AND -PI/2 IS RETURNED IF SMA /ARG1 IS NEGATIVE JMP ATN209 .ENDC .IFDEF %FPP BPA!BZA ATN209 .ENDC FLD% /LOAD -PI/2 .DSA ATN208 JMP* ATAN2 /..AND EXIT / ATN209=. .IFUND %FPP /CHECK FOR SPECIAL CONDITION OF ATAN 0/0 SZA /WHICH IS UNDEFINED. SIGNAL OTS 16, AND RETURN JMP .+3 /WITH ARBITRARY VALUE OF +PI/2 .ENDC .IFDEF %FPP BNA .+3 .ENDC JMS* .ER .DSA 400016 /ERROR IS RECOVERABLE FLD% /LOAD +PI/2 .DSA ATN207 /...AND EXIT. JMP* ATAN2 ATN206 FDV% /IN NON-EXCEPTIONAL CASES, DIVIDE ARG1 BY ARG2, .DSA ATN202+400000 /AND USE .ED TO COMPUTE ARCTANGENT JMS* .ED /THE VALUE RETURNED IS IN THE INTERVAL LAC* ATN205 / -PI/2 TO PI/2. IF THE SIGN OF ARG2 IS POSITIVE SMA /THEN THE ANGLE IS CORRECTLY IN THE FIRST OR JMP* ATAN2 /FOURTH QUADRANT, AND THE ANSWER IS OK AS IS. .IFUND %FPP /OTHERWISE WHEN ARG2 IA NEGATIVE AND THE ANSWER LAC* .AB /POSITIVE, THEN THE CORRECTED ANSWER IS IN THE 3RD SPA /QUADRANT. ELSE WHEN ARG2 IS NEGATIVE JMP .+4 /AND THE PRINCIPLE INTERVAL IS NEGATIVE, .ENDC /THE ADJUSTED ANGLE IS IN THE SECOND QUADRANT. .IFDEF %FPP BMA .+4 .ENDC FSB% /SUBTRACT PI TO ADJUST TO 3RD QUADRANT .DSA ATN204 JMP* ATAN2 FAD% /ADD PI TO ADJUST TO 2ND QUADRANT .DSA ATN204 JMP* ATAN2 / ATN204 553002 /PI 311037 ATN205 0 /ADDRESS OF MSB OF ARG 2 ATN207 553001 /PI/2 311037 ATN208 553001 / -PI/2 711037 .END