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 .SIN OR .COS * DEF *+3 * DEF * DEF * (A,B) = ASCII "05OR" * * * 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