ASMB,L,R,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 "ATAN" - SINGLE PRECISION TRIGONOMETRIC INVERSE TANGENT.
      NAM ATAN,6 24998-1X177 REV.2001 780424
* 
      ENT ATAN,ARCTA
      EXT .ZPRV,..FCM 
* 
A     EQU 0 
B     EQU 1 
* 
*     ATAN TAKES THE SINGLE-PRECISION ARCTANGENT OF A SINGLE-PRECISION
*     ARGUMENT. 
* 
*     CALLING SEQUENCE: 
*                   DLD <ARG> 
*                   JSB ATAN
*                   <RETURN>  (A,B) = RESULT   NO ERROR RETURN. 
* 
*     METHOD:  THE FOLLOWING IDENTITIES ARE USED TO REDUCE THE RANGE
*     TO [-.5,+.5): 
*                          IDENTITY                USED IN
*                   ATAN(X)=-ATAN(-X)              [-INF,-.5) 
*                   ATAN(X)=PI/4-ATAN((1-X)/(1+X)) [.5,2) 
*                   ATAN(X)=PI/2-ATAN(1/X)         [2,+INF] 
* 
*     ON THIS RANGE, ATAN(X) IS APPROXIMATED BY:
* 
*                                 X 
*                   ----------------------------------
*                                           C3
*                    C1 + C2 * ( X**2 + ----------- ) 
*                                        C4 + X**2
*     WHERE:
*                   C1 = 1.3504734
*                   C2 = .15700588
*                   C3 =-4.4369869
*                   C4 = 1.9876921
      SKP 
*                   RANGE REDUCE
* 
ATAN  NOP 
ARCTA EQU ATAN      FOR ALGOL.
      JSB .ZPRV     FOR SHARING.
      DEF LIBX
      STA X         SAVE FIRST WORD ARG 
      CCA           IF X IN [-0.5,+0.5) SET CONST TO (ZERO)-1 
      SLB 
      JMP ATAN3 
      STB X+1       SAVE SECOND WORD
      LDA X         SET FLAG FOR X<0
      RAL 
      IOR =B177776  -1 IFF X<0
      STA SIGN
      SLA,RSS       TAKE ABS(X) 
      JMP ATAN1     IF +
      LDA X         ELSE NEGATE 
      JSB ..FCM 
      STA X 
      STB X+1 
ATAN1 LDA B         SEE IF X IN [-2,2)
      AND =B374 
      SZA 
      JMP ATAN2     NO. 
      LDA X         YES, REPLACE WITH (1-X)/(1+X) 
      SZA,RSS       ARG ZERO ?
      JMP LIBX      YES, RESULT ZERO. 
      FAD ONE       1+X 
      STA TEMP
      STB TEMP+1
      LDA ONE 
      LDB ONE+1 
      FSB X         1-X 
      FDV TEMP      (1-X)/(1+X) 
      STA X 
      LDA PI4       (LOWER WD OF PI/4) - 1
      JMP ATAN3 
ATAN2 LDA ONE       X OUTSIDE [-2,2), REPLACE WITH 1/X
      LDB ONE+1 
      FDV X         1/X 
      STA X 
      LDA PI2       (LOWER WD OF PI/2) - 1
ATAN3 STA CONST+1   (LOWER WORD OF CONSTANT) - 1
      STB X+1       FINALLY STORE X LOWER 
      LDA X         RELOAD X UPPER
      SKP 
*                   EVALUATE ATAN OF REDUCED ARG
* 
      FMP X         X**2
      STA XSQ 
      STB XSQ+1 
      FAD C4        C4+XSQ
      STA TEMP
      STB TEMP+1
      LDA C3
      LDB C3+1
      FDV TEMP      C3/(C4+XSQ) 
      FAD XSQ       XSQ+C3/...
      FMP C2        C2*(XSQ+...)
      FAD C1        C1+C2*... 
      STA TEMP
      STB TEMP+1
      LDA X 
      LDB X+1 
      FDV TEMP      Z = RESULT = X/(C1+...) 
* 
*                   ADJUST BY ZERO, PI/4, PI/2; ATTACH SIGN.
* 
      ISZ CONST+1   FIX CONSTANT, SEE IF ZERO 
      JMP *+2       NO
      JMP LIBX      YES, DONE.
      FSB CONST     Z - CONST 
      ISZ SIGN      WAS ORIGINAL ARG + ?
      JSB ..FCM     YES, WANT (CONST - Z) 
LIBX  JMP ATAN,I    DONE. 
      DEF ATAN
      SKP 
*                   LOCALS & CONSTANTS. 
* 
X     BSS 2         REDUCED ARG 
XSQ   BSS 2         X**2
TEMP  BSS 2         TEMP
SIGN  BSS 1         -1 IFF ARG<0
CONST OCT 062207    FIRST WORD OF PI/2 & PI/4 
      BSS 1         DETERMINES WHICH CONSTANT USED
PI2   ABS 166402B-1 (LOWER WORD OF PI/2) - 1
PI4   ABS 166400B-1 (LOWER WORD OF PI/4) - 1
ONE   DEC 1.0 
C1    DEC 1.3617611 
C2    DEC .15435765 
C3    DEC -4.7376165
C4    DEC 2.0214656 
      END 
                                                                                                                                                                                            