ASMB,R,L,C
* 
*  **************************************************************** 
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979.  ALL RIGHTS      * 
*  * RESERVED.  NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED,       * 
*  * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT * 
*  * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY.        * 
*  **************************************************************** 
* 
*   NAME: PART OF MATH LIBRARY
*   SOURCE:  24998-18XXX  SEE NAM FOR LAST THREE DIGITS 
*   RELOC: PART OF 24998-12001
*   PGMR: BG & JTS
* 
      HED "ATAN2" ARCTANGENT OF (X1/X2). SINGLE PRECISION 
      NAM ATAN2,6 24998-1X163 REV.2001 750701 
      ENT ATAN2 
      EXT .ZRNT,.ENTP,SIGN,ATAN 
      SPC 2 
* 
*     CALLING SEQUENCE: Y = ARCTAN(X1/X2) 
*     JSB ATAN2 
*     DEF *+3 
*     DEF X1
*     DEF X2
*     (RESULT IN A AND B) 
      SPC 2 
TDB   NOP 
      DEC 8 
      NOP 
ARG   NOP         ADDRESS FOR SIGN
T     REP 2         TEMPORARY 
      NOP 
X1    NOP 
X2    NOP 
ATAN2 NOP 
      JSB .ZRNT 
      DEF LIBX
      JSB .ENTP 
      DEF X1
      STA TDB+2 
      DLD X1,I
      FDV X2,I      COMPUTE X1/X2 
      SOC           ANSWER OUT OF RANGE ? 
      SZA,RSS       YES. Z TOO BIG ?
      JMP ARGOK     NO. Z OKAY
      JSB SIGN      YES. ANSWER = SIGN(X1) * PI/2 
      DEF PI2 
      DEF X1,I
      JMP LIBX
ARGOK JSB ATAN      COMPUTE ARCTAN(X1/X2) 
      STA T 
      LDA X2,I
      SSA,RSS       X2 < 0 ?
      JMP TAKIT 
      STB T+1       YES 
      LDA X1        IF X1 = 0 , Y = PI, 
      LDB X1,I        ELSE Y = ARCTAN(X1/X2) +
      SZB,RSS                  SIGN(X1) * PI
      LDA ADPI
      STA ARG       STORE ADDRESS OF PI OR X1 
      JSB SIGN
ADPI  DEF PI
      DEF ARG,I 
      FAD T 
      RSS 
TAKIT LDA T 
LIBX  JMP TDB+2,I 
      DEF TDB 
      DEC 0 
      SPC 2 
PI    DEC 3.1415926                PI 
PI2   DEC 1.5707963                PI/2 
      END 
* 
                                  