*DECK     SINCO 
          IDENT  P.SINCO
          B1=1
          ENTRY  P.SINCO
 SINCO    SPACE  4,10 
 SINCO    TITLE  P.SINCO - SINE OR COSINE OF ARGUMENT.
          COMMENT PASCAL 6000 SINE OR COSINE ROUTINE. 
          COMMENT COPYRIGHT (C) UNIVERSITY OF MINNESOTA - 1978. 
 SINCO    SPACE  4,10 
***       P.SINCO - SINE OR COSINE OF ARGUMENT. 
*         L. A. LIDDIARD.    CIRCA 1970.
*         D. M. LALIBERTE.   76/08/25.
* BRING DOCUMENTATION UP TO CODING STANDARDS. 
 SINCO    SPACE  4,25 
***       P.SINCO - SINE OR COSINE OF ARGUMENT. 
* 
*         ENTRY  (B1) = 1.
*                (B3) = 0 FOR SINE, 1 FOR COSINE. 
*                (X1) = ARGUMENT. 
* 
*         EXIT   (X6) = SINE OR COSINE OF ARGUMENT. 
*                EXITS TO P.SABRT IF ARGUMENT OUT OF RANGE. 
* 
*         USES   A - 2, 3, 4, 5.
*                B - 3, 7.
*                X - ALL. 
* 
*         CALLS  P.SABRT. 
* 
*         MACROS NONE.
* 
*         ALGORITHM AND CONSTANTS COPYRIGHT (C) 1970 BY PROFESSOR 
*         KRZYSZTOF FRANKOWSKI, UNIVERSITY OF MINNESOTA.
* 
*         RELATIVE ACCURACY (I.E. ERROR/RESULT) 
* SINE    AVERAGE = 1.8E-15 IN THE RANGE   -PI/2 BY PI/10000 TO  +PI/2
*         WORST   =   8E-15 IN THE RANGE   -PI/2 BY PI/10000 TO  +PI/2
* COSINE  AVERAGE = 2.2E-15 IN THE RANGE   -PI/2 BY PI/10000 TO  +PI/2
*         WORST   =   8E-15 IN THE RANGE   -PI/2 BY PI/10000 TO  +PI/2
* 
*         OPTIMIZED FOR CDC 6600 (OR 6700), OR CDC CYBER 74 COMPUTERS.
  
  
 P.SINCO  PS                 ENTRY
          SX0    -B3         SINE/COSINE FLAG 
          SB3    -B1         SET BUMPING REGISTER 
          SA2    SNCC        LOAD2/PI UPPER 
          UX7,B7 X1          GET ARGUMENT EXPONENT
          SA5    A2-B3       LOAD INTEGERIZER 
          AX7    77B         SIGN BITS OF ARGUMENT
          IX3    X5-X0       INTEGERIZER + 0 IF SINE, 1 IF COSINE 
          GE     B3,B7,SNC1  IF GOOD EXPONENT 
          EQ     SNC3        ANALYZE BAD EXPONENT 
  
 SNC1     FX6    X2*X1       (2/PIU*ARG)U 
          BX4    X5-X7       INTEGERIZER HAS SAME SIGN AS ARGUMENT
          RX7    X6+X4       FIND N MULTIPLES OF PI/2 
          DX4    X2*X1       (2/PIU*ARG)L 
          BX2    X5-X7       GET N
          NX5    X7          FLOAT N
          IX7    X3+X2       INTEGERIZER+1 OR 0+N GIVES QUADRANT
          SA2    A5-B3       LOAD 2/PI LOWER
          FX3    X6-X5       (2/PIU*ARG)U-N 
          DX6    X6-X5       GET ANY BIT SHIFTED DOWN 
          FX1    X2*X1       (2/PIL*ARG)U 
          NX5    X3 
          FX6    X6+X4       ADD (2/PIU*ARG)L 
          FX6    X6+X1       ADD (2/PIL*ARG)U 
          MX2    59 
          RX1    X6+X5       FORM Z (REDUCED ARGUMENT)
          RX6    X1*X1       Z**2 
          BX2    -X2*X7      GET 1 IF COSINE, 0 IF SINE TO COMPUTE
          SA3    X2+SNCD     LOAD CORRECT CONSTANT GROUP
          SB3    B3+B3       SET BUMPING REGISTER TO -2 
          RX0    X6*X6       Z**4 
          SA5    A3-B3       LOAD N4
          RX4    X3*X6       N3*Z**2
          SA3    A5-B3       LOAD N2
          SB7    X2          SAVE WHETHER IN SINE OR COSINE 
          LX7    58          POSITION AT SIGN OF QUADRANT 
          RX5    X5*X0       N4*Z**4
          RX2    X4+X3       N3*Z**2+N2 
          SA3    A3-B3       LOAD N1
          SA4    A3-B3       LOAD N0
          RX2    X5+X2       N4*Z**4+N3*Z**2+N2=R 
          RX0    X2*X0       R*Z**4 
          RX3    X3*X6       N1*Z**2
          SA5    A4-B3       LOAD 1.0 OR PI/2 
          RX2    X0+X3       R*Z**4+N1*Z**2 
          RX2    X2+X4       R*Z**4+N1*Z**2+N0=POLY 
          NO
          RX0    X2*X2       POLY**2
          RX6    X0*X6       Z**2*POLY**2 
          NZ     B7,SNC2     IF COSINE COMPUTATION
          RX5    X1*X5       Z*PI/2 
          RX6    X6*X1       Z**2*POLY**2*Z 
 SNC2     FX3    X5-X6
          AX7    77B         GET SIGN BITS OF QUADRANT
          DX0    X5-X6
          NX4    X3 
          RX5    X4+X0
          BX6    X7-X5       GET PROPER SIGN
          EQ     P.SINCO     RETURN 
  
 SNC3     SX0    SNCA 
          ID     X1,SNC4     IF INDEFINITE ARGUMENT 
          OR     X1,SNC4     IF INFINITE ARGUMENT 
          SX0    SNCB 
 SNC4     EQ     =XP.SABRT   ABORT
  
 SNCA     DATA   C* INFINITE OR INDEF ARGUMENT OF SIN/COS. *
  
 SNCB     DATA   C+ ABS(ARG) >= 2**47 IN SIN/COS. + 
  
 SNCC     DATA   17175057460333447104B  TWO PI
          DATA   20000000000000000000B  INTEGERIZER 
  
          DATA   16370522477411653721B
 SNCD     DATA   -1.44725130681196E-5   S3
          DATA   5.172606069276518E-5   C3
          DATA   1.54733311005155E-7    S4
          DATA   -4.413282528387191E-7  C4
          DATA   1.38346449783347E-3    S2
          DATA   -3.521949713998275E-3  C2
          DATA   -4.95774235001375E-2   S1
          DATA   1.14191398434002E-1    C1
          DATA   8.03718916976708E-1    S0
          DATA   -1.110720734539535     C0
          DATA   1.5707963267949        PI/2
          DATA   1.0
 SINCO    SPACE  4
          END 
