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 ".TSCS" - TRIPLE PRECISION TRIGONOMETRIC SINE AND COSINE. 
      NAM .TSCS,7 24998-1X131 REV.2001 790417 
* 
      ENT .SIN,.COS 
      EXT .ENTR,/CMRT,DPOLY,..TCM 
* 
*     .TSCS TAKES THE TRIPLE-PRECISION SINE OR COSINE 
*     TRIPLE-PRECISION ARGUMENT.
* 
*     CALLING SEQUENCE: 
* 
*                   JSB <ROUTINE>    .SIN OR .COS 
*                   DEF *+3 
*                   DEF <RESULT>
*                   DEF <ARG> 
*                   <ERROR RETURN>   (A,B) = ASCII "05OR" 
*                   <NORMAL RETURN> 
* 
*     THE ERROR RETURN IS TAKEN IF THE ARGUMENT IS OUTSIDE
*     THE RANGE  [-2**23,+2**23) .
* 
*     METHOD:  THE ROUTINE "/CMRT" IS USED TO SUBTRACT N*PI/2 FROM
*     THE ARGUMENT AND MULTIPLY BY 4/PI, WHERE N IS CHOSEN S.T. 
*     THE RESULT IS IN [-1,+1].  THE LOWER TWO BITS OF N ARE IN A.
*     THE FINAL RESULT IS THEN THE SINE OR COSINE OF THE REDUCED VALUE, 
*     DEPENDING ON WHETHER AN EVEN OR ODD MULTIPLE OF PI/2 WAS
*     SUBTRACTED.  THE RESULT IS NEGATED IF AN ODD MULTIPLE OF PI 
*     WAS SUBTRACTED. 
* 
*     THE APPROXIMATIONS USED FOR SINE AND COSINE ON [-1,+1] ARE: 
* 
*                                       S1+XSQ*(S2+XSQ*(S3+XSQ*S4)) 
*                   SINE(X*PI/4) = X * -----------------------------
*                                       S5+XSQ*(S6+XSQ*(S7+XSQ) 
* 
* 
*                                     C1+XSQ*(C2+XSQ*(C3+XSQ*C4)) 
*                   COSINE(X*4/PI) = -----------------------------
*                                     C5+XSQ*(C6+XSQ*(C7+XSQ))
* 
*     WHERE:
*            S1 = +.206643399057353636D7    C1 = +.129054063552079782D7 
*            S2 = -.181603957072347052D6    C2 = -.374567381232715042D6 
*            S3 = +.359993003561793397D4    C3 = +.134323138925688837D5 
*            S4 = -.201074790195269777D2    C4 = -.112314630290509841D3 
*            S5 = +.263106547338311489D7    C5 = +.129054063552079782D7 
*            S6 = +.392702372048540481D5    C6 = +.234677917710655242D5 
*            S7 = +.278119167978678163D3    C7 = +.209695300876930826D3 
      SKP 
*                   RANGE REDUCE, PICK WHICH APPROXIMATION TO USE.
* 
.SIN  NOP           ".SIN" ENTRY POINT
      LDA .SIN
      LDB =D4 
      JMP TSCS0 
.COS  NOP           ".COS" ENTRY POINT
      LDA .COS
      LDB =D6 
TSCS0 STA TSCS      DUMMY UP ENTRY FOR .ENTR
      STB J         SAVE J
      JMP TSCS+1
* 
RESLT DEF *-* 
ARG   DEF *-* 
TSCS  NOP           FAKE ENTRY POINT
      JSB .ENTR     COPY ADDRESSES
      DEF RESLT 
      LDA J         RANGE REDUCE. 
      JSB /CMRT 
      DEF X 
      DEF C 
      DEF ARG,I 
      JMP ERROR     ARG TOO BIG.
      ADB J         N+J: BITS 1,2 CONTROL SIN/COS & SIGN
      INB           (SET BIT 15 IN FLAG WORD) 
      RBL,CLE,ERB   (CLEAR BIT 14 IN FLAG WORD) 
      LDA SINP      SET UP POINTER TO PROPER COEFS
      RBR,SLB       SET UP DPOLY FLAGS
      LDA COSP
      STB J 
      STA CONST 
* 
*                   EVALUATE THE SINE OR COSINE RATIONAL FORM.
* 
      JSB DPOLY     EVALUATE 3/3 RATIONAL FORM. 
J     ABS *-*       FLAGS 
      DEF RESLT,I 
      DEF X 
CONST DEF *-*       CONSTANTS 
      DEF THREE     +3
      DEF THREE     +3
* 
*                   ATTACH SIGN, EXIT.
* 
      ISZ TSCS      NORMAL RETURN.
      LDA J         NEED TO NEGATE ?
      RAR,SLA 
      JMP TSCS,I    NO, EXIT. 
      JSB ..TCM     YES, DO IT. 
      DEF RESLT,I 
      JMP TSCS,I    EXIT. 
      SKP 
*                   ERROR PROCESSING. 
* 
ERROR LDA =A05      (A,B) = ASCII "05OR"
      LDB =AOR
      JMP TSCS,I    TAKE ERROR EXIT.
* 
*                   LOCALS & CONSTANTS. 
* 
X     BSS 4         REDUCED ARG.
SINP  DEF S4        POINTER FOR DPOLY 
COSP  DEF C4        POINTER FOR DPOLY 
THREE DEC 3 
      SUP 
C     OCT 050574,140667,023442,005402  4/PI FIRST 55 BITS 
CL    OCT 071162,020251,047741,035713  4/PI AFTER 1ST 28 BITS 
S4    OCT 127621,170405,014200,077412 
S3    OCT 070177,070266,101631,021030 
S2    OCT 123523,100537,124720,030044 
S1    OCT 077040,003766,054350,136052 
S7    OCT 042607,120162,135311,146422 
S6    OCT 046263,017134,135211,045440 
S5    OCT 050113,031362,057505,105054 
C4    OCT 107657,072143,123755,161416 
C3    OCT 064360,120266,103333,120034 
C2    OCT 122215,104746,074206,046046 
C1    OCT 047304,131212,142766,145052 
C7    OCT 064330,177636,077646,023020 
C6    OCT 055653,145261,101060,054036 
C5    OCT 047304,131212,142766,145052 
      UNS 
      END 
                                                                                                                                                                                                                    