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 <RESULT>
*                   DEF <ARG> 
*                   <ERROR RETURN>   (A,B) = ASCII "07OF" 
*                   <NORMAL RETURN> 
* 
*     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 
                                                                                                                                                                                              