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" - TRIPLE PRECISION INVERSE TRIGONOMETRIC TANGENT. NAM .ATAN,7 24998-1X154 REV.2001 790417 * ENT .ATAN EXT .ENTR,.CFER,.FLUN,/ATLG,DPOLY,.TSUB,.TDIV,..TCM * * .ATAN TAKES THE TRIPLE-PRECISION ARCTANGENT OF A * TRIPLE-PRECISION ARGUMENT. * * CALLING SEQUENCE: * * JSB .ATAN * DEF *+3 * DEF * DEF * * THERE IS NO ERROR RETURN. * * METHOD: THE FOLLOWING IDENTITIES ARE USED TO REDUCE THE RANGE * TO [-.414213,+.414213] : * * IDENTITY RANGE USED * ATAN(X) = -ATAN(-X) [-INF,-.414] * ATAN(X) = PI/4 - ATAN((1-X)/(1+X)) [.414,2.414] * ATAN(X) = PI/2 - ATAN(1/X) [2.414,+INF] * * ON THIS RANGE, THE FOLLOWING APPROXIMATION IS USED: * * C1+XSQ*(C2+XSQ*(C3+XSQ*(C4+XSQ*C5))) * ATAN(X) = X * -------------------------------------- * C6+XSQ*(C7+XSQ*(C8+XSQ*(C9+XSQ))) * * WHERE: * C1 = +.445452376106737266D2 * C2 = +.774832800120330864D2 * C3 = +.409713682601679458D2 * C4 = +.666072298720980281D1 * C5 = +.158970310916497573D0 * C6 = +.445452376106737267D2 * C7 = +.923316925489242028D2 * C8 = +.628395515876957856D2 * C9 = +.155045070449078784D2 SKP * RANGE REDUCE. * RESLT DEF *-* ARG DEF *-* .ATAN NOP JSB .ENTR DEF RESLT JSB .CFER COPY ARG DEF X DEF ARG,I LDA X+3 IN [-.5,+.5) ? CCB (SET CONST = 0) SLA,RSS JMP ATAN1 NO. IOR =B177400 YES, CHECK [.414,.5) INA,SZA JMP ATAN5 IN [-.25,+.25) LDA X ABS(X) IN [.25,.5] OR ZERO SSA TAKE ABS(X) CMA ADA =B-65012 ABS(X) - .414 SSA JMP ATAN5 IN [-.414,+.414], NO REDUCTION. ATAN1 LDA X TAKE ABS(X) SZA,RSS IS X = 0 ? JMP ATAN5 YES, NO REDUCTION. STA SIGN SSA,RSS JMP ATAN2 JSB ..TCM DEF X ATAN2 LDB X+3 X >= 4 ? JSB .FLUN ADA =D-3 SSA,RSS JMP ATAN4 YES, USE 1/X INA,SZA X < 2 ? JMP ATAN3 YES, USE (1-X)/(1+X) LDA X X IN [2,4], CHECK 2.414213 ADA =B-46501 ABS(X) - 2.414213 SSA,RSS X > 2.414 ? JMP ATAN4 YES, USE 1/X ATAN3 JSB /ATLG FORM (1-X)/(1+X) DEF X LDB PI4L (PI/4 LAST WORD) - 1 JMP ATAN5 ATAN4 JSB .TDIV 1/X DEF X DEF ONE DEF X LDB PI2L (PI/2 LAST WORD) - 1 SKP * EVALUATE APPROXIMATION, UNDO RANGE REDUCTION. * ATAN5 STB CONST+3 SET CONSTANT VALUE JSB DPOLY EVALUATE RATIONAL FORM OCT 100000 FLAG DEF RESLT,I DEF X DEF C5 CONSTANTS DEF FOUR DEF FOUR ISZ CONST+3 IN [-.414,+.414] ? JMP *+2 JMP .ATAN,I YES, DONE. LDA SIGN ARG > 0 ? SSA JMP ATAN6 NO, DO CONST - Z JSB .TSUB DEF RESLT,I DEF CONST DEF RESLT,I JMP .ATAN,I (EXIT) ATAN6 JSB .TSUB YES, DO Z - CONST DEF RESLT,I DEF RESLT,I DEF CONST JMP .ATAN,I EXIT * * LOCALS & CONSTANTS * SIGN BSS 1 SIGN OF ARG X BSS 4 REDUCED ARG PI4L OCT 060377 (4TH WD PI/4) - 1 PI2L OCT 060401 (4TH WD PI/2) - 1 FOUR DEC 4 CONSTANT FOR DPOLY SUP CONST OCT 062207,166521,010264,0 FIRST 3 WDS OF PI/2, PI/4 ONE OCT 040000,0,0,2 4-WD 1.0 C5 OCT 050544,107174,153665,146375 C4 OCT 065222,051104,056201,022406 C3 OCT 050761,053456,035626,063014 C2 OCT 046573,134075,023176,015416 C1 OCT 054427,024542,052311,021014 C9 OCT 076011,035375,051730,174010 C8 OCT 076655,154664,124352,121414 C7 OCT 056124,164715,104764,151016 C6 OCT 054427,024542,052311,021014 UNS END