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 ".EXP" - TRIPLE PRECISION EXPONENTIAL FUNCTION. NAM .EXP,7 24998-1X156 REV.2001 780921 * ENT .EXP EXT .ENTR,.CFER,.4ZRO,/CMRT,/EXTH * * .EXP TAKES THE TRIPLE-PRECISION EXPONENTIAL FUNCTION (E**X) * OF A TRIPLE-PRECISION ARGUMENT. * * CALLING SEQUENCE: * * JSB .EXP * DEF *+3 * DEF * DEF * (A,B) = ASCII "07OF" * * * ERROR RETURN: ARG > 88.029692, OFL. IF THE * ARG IS < -88.722839, ZERO IS RETURNED (NO ERROR). * * METHOD: THE IDENTITY: * * EXP(X) = 2**N * 2**(X/LN(2)-N) * * IS USED TO REDUCE THE PROBLEM TO EVALUATION OF 2**(Y-1) ON * THE INTERVAL [-.5,+.5] . THE SUBTRACTION X/LN(2)-N IS DONE * USING THE ROUTINE "/CMRT" TO AVOID LOSS OF PRECISION FROM * CANCELLATION. (ACTUALLY, 2/LN(2) IS USED SO THAT N MAY BE * COMPUTED MORE EASILY. ".EXTH" COMPENSATES.) THEN "/EXTH" IS * USED TO COMPUTE EXP(X) GIVEN N AND X/LN(2)-N . SPC 1 * RANGE REDUCE. * RESLT DEF *-* RESULT ADDR ARG DEF *-* ARG ADDR .EXP NOP JSB .ENTR DEF RESLT LDA =D-2 "EXP" FLAG TO /CMRT JSB /CMRT DEF EX DEF C DEF ARG,I JMP OFUFL ARG TOO LARGE. STB N SAVE N, SIGN(X) LDA EX (ALLOW 2**126.9) SSA,RSS CHECK FOR OFL,UFL. COMPUTE FINAL EXPONENT. ADB =D2 ASL 7 DOESN'T CATCH 2**127 WHEN X*C-N = -EPS SOC JMP OFUFL OFL OR UFL. SKP * CALL /EXTH TO DO THE WORK. * LDA N N JSB /EXTH EXPTR DEF EX DEF EX LDA ARG,I SPECIAL OVERFLOW CHECK: ELA ARG >= 0 AND LDA EX+3 EXPONENT(RESULT) = 0 (RES = 0.5) SEZ,SZA,RSS BOTH ? JMP OFL YES, OFL. LDB EXPTR RESULT = E**X EXIT STB SRC JSB .CFER COPY RESULT. DEF RESLT,I SRC DEF *-* CLO LEAVE OFL CLEAR. ISZ .EXP EXIT JMP .EXP,I * * OFL/UFL HANDLING. * OFUFL LDA ARG,I USE SIGN TO DECIDE LDB ZEROP (IN CASE UFL) CMA,SSA,RSS WHICH ? JMP EXIT UFL, RETURN ZERO. OFL LDA =A07 (A,B) = ASCII "07OF" LDB =AOF STO SET OFL. JMP .EXP,I ERROR EXIT * * LOCALS & CONSTANTS. * EX BSS 4 E**X AND REDUCED X N BSS 1 N ZEROP DEF .4ZRO+0 SUP C OCT 056125,016624,127013,174004 CL OCT 045340,137605,156764,040315 UNS END