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" - TRIPLE PRECISION INVERSE TRIGONOMETRIC TANGENT. 
      NAM .ATAN,7 24998-1X154 REV.2001 790417 
* 
      ENT .ATAN 
      EXT .ENTR,.CFER,.FLUN,/ATLG,DPOLY,.TSUB,.TDIV,..TCM 
* 
*     .ATAN TAKES THE TRIPLE-PRECISION ARCTANGENT OF A
*     TRIPLE-PRECISION ARGUMENT.
* 
*     CALLING SEQUENCE: 
* 
*                   JSB .ATAN 
*                   DEF *+3 
*                   DEF <RESULT>
*                   DEF <ARG> 
* 
*     THERE IS NO ERROR RETURN. 
* 
*     METHOD:  THE FOLLOWING IDENTITIES ARE USED TO REDUCE THE RANGE
*     TO [-.414213,+.414213] :
* 
*                           IDENTITY                      RANGE USED
*                   ATAN(X) = -ATAN(-X)                  [-INF,-.414] 
*                   ATAN(X) = PI/4 - ATAN((1-X)/(1+X))   [.414,2.414] 
*                   ATAN(X) = PI/2 - ATAN(1/X)           [2.414,+INF] 
* 
*     ON THIS RANGE, THE FOLLOWING APPROXIMATION IS USED: 
* 
*                           C1+XSQ*(C2+XSQ*(C3+XSQ*(C4+XSQ*C5)))
*            ATAN(X) = X * -------------------------------------- 
*                           C6+XSQ*(C7+XSQ*(C8+XSQ*(C9+XSQ))) 
* 
*     WHERE:
*                   C1 = +.445452376106737266D2 
*                   C2 = +.774832800120330864D2 
*                   C3 = +.409713682601679458D2 
*                   C4 = +.666072298720980281D1 
*                   C5 = +.158970310916497573D0 
*                   C6 = +.445452376106737267D2 
*                   C7 = +.923316925489242028D2 
*                   C8 = +.628395515876957856D2 
*                   C9 = +.155045070449078784D2 
      SKP 
*                   RANGE REDUCE. 
* 
RESLT DEF *-* 
ARG   DEF *-* 
.ATAN NOP 
      JSB .ENTR 
      DEF RESLT 
      JSB .CFER     COPY ARG
      DEF X 
      DEF ARG,I 
      LDA X+3       IN [-.5,+.5) ?
      CCB           (SET CONST = 0) 
      SLA,RSS 
      JMP ATAN1     NO. 
      IOR =B177400  YES, CHECK [.414,.5)
      INA,SZA 
      JMP ATAN5     IN [-.25,+.25)
      LDA X         ABS(X) IN [.25,.5] OR ZERO
      SSA           TAKE ABS(X) 
      CMA 
      ADA =B-65012  ABS(X) - .414 
      SSA 
      JMP ATAN5     IN [-.414,+.414], NO REDUCTION. 
ATAN1 LDA X         TAKE ABS(X) 
      SZA,RSS       IS X = 0 ?
      JMP ATAN5     YES, NO REDUCTION.
      STA SIGN
      SSA,RSS 
      JMP ATAN2 
      JSB ..TCM 
      DEF X 
ATAN2 LDB X+3       X >= 4 ?
      JSB .FLUN 
      ADA =D-3
      SSA,RSS 
      JMP ATAN4     YES, USE 1/X
      INA,SZA       X < 2 ? 
      JMP ATAN3     YES, USE (1-X)/(1+X)
      LDA X         X IN [2,4], CHECK 2.414213
      ADA =B-46501  ABS(X) - 2.414213 
      SSA,RSS       X > 2.414 ? 
      JMP ATAN4     YES, USE 1/X
ATAN3 JSB /ATLG     FORM (1-X)/(1+X)
      DEF X 
      LDB PI4L      (PI/4 LAST WORD) - 1
      JMP ATAN5 
ATAN4 JSB .TDIV     1/X 
      DEF X 
      DEF ONE 
      DEF X 
      LDB PI2L      (PI/2 LAST WORD) - 1
      SKP 
*                   EVALUATE APPROXIMATION, UNDO RANGE REDUCTION. 
* 
ATAN5 STB CONST+3   SET CONSTANT VALUE
      JSB DPOLY     EVALUATE RATIONAL FORM
      OCT 100000    FLAG
      DEF RESLT,I 
      DEF X 
      DEF C5        CONSTANTS 
      DEF FOUR
      DEF FOUR
      ISZ CONST+3   IN [-.414,+.414] ?
      JMP *+2 
      JMP .ATAN,I   YES, DONE.
      LDA SIGN      ARG > 0 ? 
      SSA 
      JMP ATAN6     NO, DO CONST - Z
      JSB .TSUB 
      DEF RESLT,I 
      DEF CONST 
      DEF RESLT,I 
      JMP .ATAN,I   (EXIT)
ATAN6 JSB .TSUB     YES, DO Z - CONST 
      DEF RESLT,I 
      DEF RESLT,I 
      DEF CONST 
      JMP .ATAN,I   EXIT
* 
*                   LOCALS & CONSTANTS
* 
SIGN  BSS 1         SIGN OF ARG 
X     BSS 4         REDUCED ARG 
PI4L  OCT 060377    (4TH WD PI/4) - 1 
PI2L  OCT 060401    (4TH WD PI/2) - 1 
FOUR  DEC 4         CONSTANT FOR DPOLY
      SUP 
CONST OCT 062207,166521,010264,0  FIRST 3 WDS OF PI/2, PI/4 
ONE   OCT 040000,0,0,2  4-WD 1.0
C5    OCT 050544,107174,153665,146375 
C4    OCT 065222,051104,056201,022406 
C3    OCT 050761,053456,035626,063014 
C2    OCT 046573,134075,023176,015416 
C1    OCT 054427,024542,052311,021014 
C9    OCT 076011,035375,051730,174010 
C8    OCT 076655,154664,124352,121414 
C7    OCT 056124,164715,104764,151016 
C6    OCT 054427,024542,052311,021014 
      UNS 
      END 
                                                                                                                                          