ASMB,R,L,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 "DEXP" DOUBLE PRECISION EXPONENTIAL (DLB) NAM DEXP,6 24998-1X165 REV.2001 750701 ENT DEXP EXT .ZRNT,SNGL,IFIX,DDINT EXT .XADD,.XSUB,.XMPY,.XDIV EXT .FLUN,.XPAK,.ENTP,.DFER SPC 1 * * CALLING SEQUENCE: Y = EXP(X) * JSB DEXP * DEF *+3 * DEF Y (RESULT) * DEF X (ARGUMENT) * (ERROR RETURN) * (NORMAL RETURN) SPC 2 TDB NOP DEC 18 NOP T REP 3 TEMPORY STORAGE NOP EXPON NOP EXPONENT FOR REDUCED RANGE P1 REP 3 STORAGE NOP Q1 REP 3 FOR NOP P2 REP 3 EVALUATION. NOP Y NOP ADDRESS OF Y X NOP ADDRESS OF X DEXP NOP JSB .ZRNT DEF LIBX JSB .ENTP TRANSFER PARAMETERS DEF Y STA TDB+2 JSB .XMPY T = X * LOG2(E) DEF T DEF X,I DEF LOG2E LDA T SSA JMP X.NEG JSB .XADD IF X > 0, P1 = T + .5 DEF P1 DEF T DEF D.5 JMP INTGR X.NEG JSB .XSUB IF X < 0, P1 = T - .5 DEF P1 DEF T DEF D.5 NOP GIVE THE INTERUPTS A CHANCE INTGR JSB DDINT P1 = LARGEST INTEGER <= ABS(P1) DEF *+3 DEF P1 DEF P1 NOP GIVE THE INTERUPTS A CHANCE JSB SNGL CONVERT P1 TO INTEGER DEF *+2 DEF P1 JSB IFIX STA EXPON AND SAVE. JSB .XSUB T = T - Y DEF T DEF T DEF P1 NOP GIVE THE INTERRUPTS A CHANCE JSB .XMPY T = T * LN(2) DEF T DEF T DEF LN2 NOP GIVE THE INTERRUPTS A CHANCE JSB .XMPY P1 = T * C3 DEF P1 DEF T DEF C3 NOP GIVE THE INTERRUPTS A CHANCE JSB .XMPY Q1 = T * T DEF Q1 DEF T DEF T NOP GIVE THE INTERRUPTS A CHANCE JSB .XADD Q1 = T * T + C4 DEF Q1 DEF Q1 DEF C4 NOP GIVE THE INTERRUPTS A CHANCE JSB .XMPY DEF P2 DEF Q1 DEF C2 NOP GIVE THE INTERRUPTS A CHANCE JSB .XMPY Q1 = Q1 * T DEF Q1 DEF Q1 DEF T NOP GIVE THE INTERRUPTS A CHANCE JSB .XADD Q1 = Q1 * T + P1 DEF Q1 DEF Q1 DEF P1 NOP GIVE THE INTERRUPTS A CHANCE JSB .XMPY P1 = Q1 * C1 DEF P1 DEF Q1 DEF C1 NOP GIVE THE INTERRUPTS A CHANCE JSB .XADD T = T + B1 DEF T DEF T DEF B1 NOP GIVE THE INTERRUPTS A CHANCE JSB .XMPY T = (T + B1) * Q1 DEF T DEF T DEF Q1 NOP GIVE THE INTERRUPTS A CHANCE JSB .XADD T = (T + B1) * Q1 + P2 DEF T DEF T DEF P2 NOP GIVE THE INTERRUPTS A CHANCE JSB .XDIV T = P1 / T DEF T DEF P1 DEF T JSB .XADD T = C0 + P1 / T DEF T DEF T DEF C0 LDB T+2 JSB .FLUN UNPACK EXPONENT STB T+2 ADA EXPON ADD EXPONENT FROM RANGE REDUCTN SOC OVERFLOW ? JMP ERROR YES. ERROR MESSAGE. JSB .XPAK PACK RESULT DEF T LDA T SOC OVERFLOW BIT SET ? SZA,RSS YES. AND = 0 ? JMP OK NO OVERFLOW, OR AN UNDERFLOW ERROR LDA ERMSG ERROR RETURN LDB ERMSG+1 LIBX JMP TDB+2,I RETURN DEF TDB DEC 0 OK JSB .DFER ANSWER OKAY DEF Y,I DEF T ISZ TDB+2 JMP LIBX DONE SPC 1 ERMSG ASC 2,10OF D.5 OCT 040000,0,0 .5 C0 OCT 040000,0,2 1. C1 OCT 050000,0,14 40. C2 OCT 042400,0,20 138. C3 OCT 073515,164675,033412 29.82608695652 C4 OCT 060544,026205,110410 12.17391304347 B1 OCT 130000,0,12 -20. LN2 OCT 054271,005773,164400 LN(2) LOG2E OCT 056125,016624,127002 LOG2(E) END *