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 "TAN" SINGLE PRECISION TRIGONOMETRIC TANGENT. NAM TAN,6 24998-1X151 REV.2001 780424 * ENT TAN EXT .ZPRV,.CMRS * A EQU 0 B EQU 1 * * TAN TAKES THE SINGLE-PRECISION TANGENT OF A SINGLE-PRECISION * ARGUMENT. * * CALLING SEQUENCE: * * DLD * JSB TAN * (A,B) = ASCII "09OR" * (A,B) = RESULT * * THE ERROR RETURN IS TAKEN FOR ARGUMENTS OUTSIDE THE RANGE * [-32768*PI/4,+32768*PI/4). * * METHOD: THE ARGUMENT IS REDUCED TO THE RANGE [-PI/4,+PI/4] * USING THE IDENTITIES: * TAN(X) = TAN(X+K*PI) * TAN(X) = -1.0 / TAN(X+PI/2) * EFFECTIVELY, THE CLOSEST MULTIPLE OF PI/2 TO X IS SUBTRACTED * FROM IT. ACTUALLY, THE ARGUMENT IS MULTIPLIED BY 4/PI (IN DOUBLE * PRECISION) AND THE NEAREST EVEN INTEGER IS SUBTRACTED, SCALING * THE RESULT BY 4/PI TO THE RANGE [-1,+1]. THE TANGENT IS EVALUATED * ON THIS RANGE, AND THE RESULT IS INVERTED AND NEGATED IF AN ODD # * OF PI/2 WERE SUBTRACTED (BIT 1 OF THE ABOVE EVEN INTEGER IS SET). * * IN THE RANGE [-PI/4,+PI/4] THE FOLLOWING APPROXIMATION IS USED: * * C3 * TAN(X) = X * (C1 + C2 * (XSQ + ----------- ) ) ) * C4 + X**2 * WHERE: * C1 = .14692695 * C2 = .0019974806 * C3 = -1279.5424 * C3 = -4.0030956 SKP * RANGE REDUCE, SET FLIP FLAG. * TAN NOP JSB .ZPRV FOR SHARING. DEF LIBX JSB .CMRS X = MOD(ARG*4/PI+SIGN(1,ARG),2)-1 DEF .4PI I.E., SUBTRACT THE MULTIPLE OF PI/2 WHICH DEF N MINIMIZES THE RESULT, THEN MULT BY 4/PI. JMP ERROR IF ARGUMENT TOO BIG ISZ TAN ELSE GOOD RETURN STA X X IS REDUCED VALUE STB X+1 LDA N SET N = -1 IFF ODD MULTIPLE OF PI/2 IOR =B177775 I.E., BIT 1 SET. STA N LDA X * * COMPUTE RATIONAL FORM APPROXIMATION * FMP X X**2 STA XSQ STB XSQ+1 FAD C4 C4+XSQ STA TEMP STB TEMP+1 LDA C3 LDB C3+1 FDV TEMP C3/(C4+XSQ) FAD XSQ XSQ+C3/... FMP C2 C2*(XSQ+...) FAD C1 C1+C2*(...) FMP X RESULT = X*(C1+C2*(XSQ+C3/(C4+XSQ))) ISZ N INVERT ? JMP LIBX NO, DONE. STA TEMP YES, TAKE NEGATIVE RECIPROCAL. STB TEMP+1 LDA =B100000 FORM -1.0 CLB FDV TEMP RESULT LIBX JMP TAN,I EXIT DEF TAN SKP * ERROR PROCESSING * ERROR LDA =A09 LDB =AOR JMP LIBX * * LOCAL STORAGE AND CONSTANTS * X BSS 2 REDUCED ARGUMENT XSQ BSS 2 X**2 TEMP BSS 2 TEMP N BSS 1 INVERT FLAG: -1 IFF MUST INVERT RESULT C1 DEC .14692695 C2 DEC .0019974806 C3 DEC -1279.5424 C4 DEC -4.0030956 .4PI OCT 050574,140667,023402 4/PI END $