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 ".LOG" - TRIPLE PRECISION NATURAL LOGARITHM. NAM .LOG,7 24998-1X158 REV.2001 790417 * ENT .LOG EXT .ENTR,.CFER,.FLUN,.TADD,.TMPY,DPOLY,/ATLG,FLOAT * * .LOG TAKES THE TRIPLE-PRECISION NATURAL LOGARITMH OF A * TRIPLE-PRECISION NUMBER. * * CALLING SEQUENCE: * * JSB .LOG * DEF *+3 * DEF * DEF * (A,B) = ASCII "02UN" * * * THE ERROR RETURN IS TAKEN IF THE ARGUMENT IS NEGATIVE OR ZERO. * * METHOD: THE IDENTITY: * * LN(X) = N*LN(2) + LN(X/LN(2)) * * IS USED TO REDUCE THE RANGE TO [.707,1.414] . ON THIS RANGE, * THE FOLLOWING APPROXIMATION IS USED: * * C1+ZSQ*(C2+ZSQ*C3) * LN(Y) = Z * -------------------------- * C4+ZSQ*(C5+ZSQ*(C6+ZSQ)) * * WHERE: * Z = (1-Y) / (1+Y) * C1 = +.903435497728419518D2 * C2 = -.935961251529860988D2 * C3 = +.183395455436327320D2 * C4 = -.451717748864209816D2 * C5 = +.618553208719806812D2 * C6 = -.207538580906546412D2 SPC 2 * COPY ARGUMENT. * RESLT DEF *-* ARG DEF *-* .LOG NOP JSB .ENTR COPY ADDRESSES DEF RESLT JSB .CFER COPY ARG DEF Y DEF ARG,I SKP * SEE IF ARG <= 0, SCALE: Y = X * 2**N . * LDA Y X <= 0 ? SSA,RSS CLE,SZA,RSS (E=0) JMP ERROR YES, ERROR. ISZ .LOG NO, SET NORMAL RETURN. ADA =B-55202 MANTISSA - .707 : E=1 IFF > .707 LDB Y+3 SCALE TO [.5,1) JSB .FLUN SEZ,RSS IF IN [.5,.707) : ADB TWO DOUBLE IT SEZ,RSS ADA =D-1 AND DECR N . STB Y+3 JSB FLOAT FLOAT N STA TEMP STORE AS 4-WORD CLA STA TEMP+1 STA TEMP+2 STB TEMP+3 JSB .TMPY TAKE N*LN(2) NOW DEF TEMP DEF TEMP DEF LN2 * * TAKE LOG OF SCALED VALUE. * JSB /ATLG Z = (1-Y)/(1+Y) DEF Y JSB DPOLY OCT 100000 DEF Y DEF Y DEF C3 CONSTANTS DEF TWO NUMERATOR: SECOND ORDER DEF THREE DENOMINATOR: THIRD ORDER * * UNDO RANGE REDUCTION: ADD N*LN(2) . * JSB .TADD RESULT = N*LN(2) + LN(Y) DEF RESLT,I DEF TEMP DEF Y JMP .LOG,I EXIT * * ERROR HANDLING. * ERROR LDA =A02 (A,B) = ASCII "02UN" LDB =AUN JMP .LOG,I ERROR EXIT SKP * LOCALS & CONSTANTS. * Y BSS 4 ARG, REDUCED ARG. TEMP BSS 4 FOR FLOAT(N) AND N*LN(2) TWO DEC 2 INTEGER 2 THREE DEC 3 INTEGER 3 SUP C3 OCT 044533,130723,132636,054412 C2 OCT 121147,062127,105632,005016 C1 OCT 055127,171340,137347,104016 C6 OCT 126374,006237,165500,152412 C5 OCT 075665,166236,004574,104014 C4 OCT 122650,006437,040430,072414 LN2 OCT 054271,005773,164347,136400 UNS END