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 "DLOG" DOUBLE PRECISION NATURAL LOGARITHM 
      NAM DLOG,6 24998-1X166 REV.2001 750701
      ENT DLOG
      EXT .ZRNT,.ENTP 
      EXT .XADD,.XSUB,.XMPY,.XDIV 
      EXT .DFER,.FLUN,FLOAT,DBLE
      SPC 2 
* 
*     CALLING SEQUENCE : Y = LN(X)
*     JSB DLOG
*     DEF *+3 
*     DEF Y    (RESULT) 
*     DEF X    (ARGUMENT) 
*     (ERROR RETURN)
*     (NORMAL RETURN) 
      SPC 2 
TDB   NOP 
      DEC 23
      NOP 
T     REP 3         TEMPORARY STORAGE 
      NOP 
U     REP 3        (EXPON - 1/2) * LN(2)
      NOP 
V     REP 3 
      NOP 
Z     REP 3 
      NOP 
P1    REP 3 
      NOP 
Q1    REP 3 
      NOP 
Y     NOP           ADDRESS OF Y
X     NOP           ADDRESS OF X
DLOG  NOP 
      JSB .ZRNT 
      DEF LIBX
      JSB .ENTP 
      DEF Y 
      STA TDB+2 
      JSB .DFER     MOVE X INTO T 
      DEF T 
      DEF X,I 
      LDA T 
      SSA,RSS       IF X < 0
      SZA,RSS         OR X = 0
      JMP ERROR         GO TO ERROR EXIT. 
      LDB T+2 
      JSB .FLUN     UNPACK THE EXPONENT 
      STB T+2 
      JSB FLOAT      AND
      FSB F.5       U = EXPON -.5 
      STA U 
      STB U+1 
      JSB DBLE        CONVERT TO DOUBLE PRECISION 
      DEF *+3 
      DEF U 
      DEF U 
      JSB .XMPY      U = (EXPON - .5) * LN(2) 
      DEF U 
      DEF U 
      DEF LN2 
      NOP           GIVE THE INTERRUPTS A CHANCE
      JSB .XSUB      V = T - SQRT(2)/2
      DEF V 
      DEF T 
      DEF HSQT2 
      NOP           GIVE THE INTERRUPTS A CHANCE
      JSB .XADD 
      DEF T         T = T + SQRT(2)/2 
      DEF T 
      DEF HSQT2 
      JSB .XDIV      Z = (T - SQRT(2)/2) /
      DEF Z             (T + SQRT(2)/2) 
      DEF V 
      DEF T 
      JSB .XMPY      T = Z * Z
      DEF T 
      DEF Z 
      DEF Z 
      NOP           GIVE THE INTERRUPTS A CHANCE
      JSB .XADD      V = T + B3 
      DEF V 
      DEF T 
      DEF B3
      NOP           GIVE THE INTERRUPTS A CHANCE
      JSB .XMPY      P1 = C2 * (T + B3) 
      DEF P1
      DEF C2
      DEF V 
      NOP           GIVE THE INTERRUPTS A CHANCE
      JSB .XADD      Q1 = T + B2
      DEF Q1
      DEF T 
      DEF B2
      NOP           GIVE THE INTERRUPTS A CHANCE
      JSB .XMPY      Q1 = (T + B2) * (T + B3) 
      DEF Q1
      DEF Q1
      DEF V 
      NOP           GIVE THE INTERRUPTS A CHANCE
      JSB .XADD      Q1 = (T + B2) * (T + B3) + C3
      DEF Q1
      DEF Q1
      DEF C3
      NOP           GIVE THE INTERRUPTS A CHANCE
      JSB .XMPY      V = C1 * Q1
      DEF V 
      DEF C1
      DEF Q1
      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 + P1 
      DEF T 
      DEF T 
      DEF P1
      JSB .XDIV      T = V / T
      DEF T 
      DEF V 
      DEF T 
      JSB .XMPY      T = Z * (V / T)
      DEF T 
      DEF T 
      DEF Z 
      NOP           GIVE THE INTERRUPTS A CHANCE
      JSB .XADD      Y = T + U
      DEF Y,I 
      DEF T 
      DEF U 
      ISZ TDB+2 
      JMP LIBX
ERROR LDA ERMSG     ERROR EXIT
      LDB ERMSG+1 
LIBX  JMP TDB+2,I 
      DEF TDB 
      DEC 0 
      SPC 2 
ERMSG ASC 2,11UN
F.5   DEC 0.5 
LN2   OCT 054271,005773,164400     LN(2)
HSQT2 OCT 055202,074631,176400     SQRT(2)/2
C1    OCT 133024,075341,044012     -18.48 
C2    OCT 120554,153524,156412     -23.6437098255 
C3    OCT 100750,162307,156775     -.246270037272 
B1    OCT 100466,046623,062410     -15.8484848485 
B2    OCT 103737,034700,147004     -3.75400078147 
B3    OCT 123217,017743,036402     -1.39751437005 
      END 
* 
                                                                                                                                    