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 "ATAN" - SINGLE PRECISION TRIGONOMETRIC INVERSE TANGENT. NAM ATAN,6 24998-1X177 REV.2001 780424 * ENT ATAN,ARCTA EXT .ZPRV,..FCM * A EQU 0 B EQU 1 * * ATAN TAKES THE SINGLE-PRECISION ARCTANGENT OF A SINGLE-PRECISION * ARGUMENT. * * CALLING SEQUENCE: * DLD * JSB ATAN * (A,B) = RESULT NO ERROR RETURN. * * METHOD: THE FOLLOWING IDENTITIES ARE USED TO REDUCE THE RANGE * TO [-.5,+.5): * IDENTITY USED IN * ATAN(X)=-ATAN(-X) [-INF,-.5) * ATAN(X)=PI/4-ATAN((1-X)/(1+X)) [.5,2) * ATAN(X)=PI/2-ATAN(1/X) [2,+INF] * * ON THIS RANGE, ATAN(X) IS APPROXIMATED BY: * * X * ---------------------------------- * C3 * C1 + C2 * ( X**2 + ----------- ) * C4 + X**2 * WHERE: * C1 = 1.3504734 * C2 = .15700588 * C3 =-4.4369869 * C4 = 1.9876921 SKP * RANGE REDUCE * ATAN NOP ARCTA EQU ATAN FOR ALGOL. JSB .ZPRV FOR SHARING. DEF LIBX STA X SAVE FIRST WORD ARG CCA IF X IN [-0.5,+0.5) SET CONST TO (ZERO)-1 SLB JMP ATAN3 STB X+1 SAVE SECOND WORD LDA X SET FLAG FOR X<0 RAL IOR =B177776 -1 IFF X<0 STA SIGN SLA,RSS TAKE ABS(X) JMP ATAN1 IF + LDA X ELSE NEGATE JSB ..FCM STA X STB X+1 ATAN1 LDA B SEE IF X IN [-2,2) AND =B374 SZA JMP ATAN2 NO. LDA X YES, REPLACE WITH (1-X)/(1+X) SZA,RSS ARG ZERO ? JMP LIBX YES, RESULT ZERO. FAD ONE 1+X STA TEMP STB TEMP+1 LDA ONE LDB ONE+1 FSB X 1-X FDV TEMP (1-X)/(1+X) STA X LDA PI4 (LOWER WD OF PI/4) - 1 JMP ATAN3 ATAN2 LDA ONE X OUTSIDE [-2,2), REPLACE WITH 1/X LDB ONE+1 FDV X 1/X STA X LDA PI2 (LOWER WD OF PI/2) - 1 ATAN3 STA CONST+1 (LOWER WORD OF CONSTANT) - 1 STB X+1 FINALLY STORE X LOWER LDA X RELOAD X UPPER SKP * EVALUATE ATAN OF REDUCED ARG * 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*... STA TEMP STB TEMP+1 LDA X LDB X+1 FDV TEMP Z = RESULT = X/(C1+...) * * ADJUST BY ZERO, PI/4, PI/2; ATTACH SIGN. * ISZ CONST+1 FIX CONSTANT, SEE IF ZERO JMP *+2 NO JMP LIBX YES, DONE. FSB CONST Z - CONST ISZ SIGN WAS ORIGINAL ARG + ? JSB ..FCM YES, WANT (CONST - Z) LIBX JMP ATAN,I DONE. DEF ATAN SKP * LOCALS & CONSTANTS. * X BSS 2 REDUCED ARG XSQ BSS 2 X**2 TEMP BSS 2 TEMP SIGN BSS 1 -1 IFF ARG<0 CONST OCT 062207 FIRST WORD OF PI/2 & PI/4 BSS 1 DETERMINES WHICH CONSTANT USED PI2 ABS 166402B-1 (LOWER WORD OF PI/2) - 1 PI4 ABS 166400B-1 (LOWER WORD OF PI/4) - 1 ONE DEC 1.0 C1 DEC 1.3617611 C2 DEC .15435765 C3 DEC -4.7376165 C4 DEC 2.0214656 END