*DECK     ATAN
          IDENT  P.ATAN 
          B1=1
          ENTRY  P.ATAN 
 ATAN     SPACE  4,10 
 ATAN     TITLE  ATAN - INVERSE TANGENT OF ARGUMENT.
          COMMENT PASCAL 6000 INVERSE TANGENT ROUTINE.
          COMMENT COPYRIGHT (C) UNIVERSITY OF MINNESOTA - 1978. 
 ATAN     SPACE  4,10 
***       ATAN - INVERSE TANGENT OF ARGUMENT. 
*         L. A. LIDDIARD.    CIRCA 1970.
*         D. M. LALIBERTE.   76/08/25.
* BRING DOCUMENTATION UP TO CODING STANDARDS. 
 ATAN     SPACE  4,22 
***       ATAN - INVERSE TANGENT OF ARGUMENT. 
* 
*         ENTRY  (B1) = 1.
*                (X1) = ARGUMENT. 
* 
*         EXIT   (X6) = INVERSE TANGENT OF ARGUMENT.
*                EXITS TO P.SABRT IF INDEFINITE ARGUMENT. 
* 
*         USES   A - 1, 2, 3, 4, 5. 
*                B - 2, 3, 7. 
*                X - ALL. 
* 
*         CALLS  P.SABRT. 
* 
*         MACROS NONE.
* 
*         ALGORTHM AND CONSTANTS ARE COPYRIGHT (C) 1970 BY PROFESSOR
*         KRZYSZTOF FRANKOWSKI, UNIVERSITY OF MINNESOTA.
* 
*         RELATIVE ACCURACY (I.E. ERROR/RESULT) 
*         AVERAGE  =  2.5E-15 IN THE RANGE    -2.0 BY .0004    TO +2.0
*         WORST    =    8E-15 IN THE RANGE    -2.0 BY .0004    TO +2.0
* 
*         OPTIMIZED FOR CDC 6600 (OR 6700), OR CDC CYBER 74 COMPUTERS.
  
  
 ATN2     SA3    ATND        PI/4 
          SX0    ATNA 
          FX5    X3+X3       PI/2 
          ID     X1,=XP.SABRT  IF INDEFINITE ARGUMENT 
          BX6    X7-X5       CORRECT SIGN 
  
 P.ATAN   PS                 ENTRY/EXIT 
          SA2    ATNB        LOAD 1.0 
          UX7,B7 X1          B7 = ARGUMENT EXPONENT 
          SB3    -B1         SET BUMPING REGISTER 
          SB2    B1          SET J = 1
          AX7    77B         SIGN EXTENSION OF ARGUMENT 
          BX3    X7-X1       Z = ABS(ARG) 
          SA5    A2+B1       LOAD *16 INTEGERIZER 
          IX4    X2-X3       COMPARE ARGUMENT WITH 1.0
          PX6    X3 
          NO
          RX6    X2/X6       OBTAIN INVERSE JUST IN CASE
          PL     X4,ATN1     IF Z < 1.0 
          SX4    B7 
          LX4    48 
          SB2    B0          SET J = 0
          IX3    X6-X4       CORRECT EXPONENT OF INVERSE
          GE     B3,B7,ATN1  IF GOOD EXPONENT 
          EQ     ATN2        ANALYZE LARGE EXPONENT 
  
 ATN1     FX5    X3+X5       OBTAIN INDEX I(I = 0 THROUGH 16) 
          SB3    X5 
          NX0    X5          X0 = I/16
          FX1    X0*X3       X0*Z 
          FX3    X3-X0       Z-X0 
          NX5    X3 
          FX0    X2+X1       1.+X0*Z
          SA2    B2+ATND     LOAD P(J) = 0 OR PI/4
          SA1    B3+ATNC     LOAD ARCTAN(X0)
          FX3    X5/X0       X = (Z-X0)/(1.+X0*Z) 
          SX6    B2-B1       -1 IF J = 0  0 IF J = 1
          RX0    X2-X1       P(J)-ARCTAN(X0)
          AX6    77B         SIGN BITS OF (J-1) 
          BX7    X6-X7       SIGN(ARG) XOR SIGN(J-1)
          SA1    A5+B1       LOAD A3
          FX0    X2+X0       P(J)+(P(J)-ARCTAN(X0)) 
          SA2    A1+B1       LOAD A2
          FX6    X3*X3       X**2 
          FX4    X1*X6       A3*X**2
          SA5    A2+B1       LOAD A4
          RX1    X4+X2       A3*X**2+A2 
          FX2    X6*X6       X**4 
          FX5    X5*X2       A4*X**4
          SA4    A5+B1       LOAD A1
          RX1    X5+X1       A4*X**4+(A3*X**2+A2) = R 
          FX6    X4*X6       A1*X**2
          FX2    X1*X2       R*X**4 
          RX1    X2+X6       R*X**4+A1*X**2 
          FX6    X1*X3       (R*X**4+A1*X**2)*X 
          RX3    X3+X6
          RX2    X0-X3       2*P(J)-ARCTAN(X0)-POLY 
          BX5    -X7-X2      GET CORRECT SIGN 
          NX6,B3 X5          GET NORMALIZED ANSWER
          EQ     P.ATAN      RETURN 
  
 ATNA     DATA   C* INDEFINITE ARGUMENT OF ARCTAN. *
  
 ATNB     DATA   1.0
          DATA   17730000000000000000B  INTEGERIZER 
          DATA   -0.1428541305087450    A3
          DATA   0.1999999958014464     A2
          DATA   0.1102281616126149     A4
          DATA   -0.3333333333312845    A1
  
 ATNC     DATA   0.0                    ARCTAN(0/16)
          DATA   17137772533556263757B  ARCTAN(1/16)
          DATA   17147752672465260574B  ARCTAN(2/16)
          DATA   17155734573227471330B  ARCTAN(3/16)
          DATA   17157655565762262007B  ARCTAN(4/16)
          DATA   17164661167156037536B  ARCTAN(5/16)
          DATA   17165573031203623367B  ARCTAN(6/16)
          DATA   17166462356607460440B  ARCTAN(7/16)
          DATA   17167326147012606733B  ARCTAN(8/16)
          DATA   17174062576451554606B  ARCTAN(9/16)
          DATA   17174360013527573766B  ARCTAN(10/16) 
          DATA   17174642760071470676B  ARCTAN(11/16) 
          DATA   17175113617506232367B  ARCTAN(12/16) 
          DATA   17175352611416132331B  ARCTAN(13/16) 
          DATA   17175600247612741062B  ARCTAN(14/16) 
          DATA   17176014720556126122B  ARCTAN(15/16) 
 ATND     DATA   17176220773250420551B  ARCTAN(16/16) = PI/4
          DATA   0.0
 ATAN     SPACE  4
          END 
