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 "DSQRT" DOUBLE PRECISION SQUARE ROOT (DLB)
      NAM DSQRT,6 24998-1X145 REV.2001 750701 
      ENT DSQRT 
      EXT DBLE,SNGL,SQRT,.XDIV,.XADD,.XMPY
      EXT .ENTP,.ZRNT 
      SPC 1 
* 
*     CALCULATE Y = SQRT(X) IN EXTENDED PRECISION 
*     CALLING SEQUENCE: 
*     JSB DSQRT 
*         DEF *+3 
*         DEF Y 
*         DEF X 
*     NORMAL RETURN 
      SPC 1 
*     NOTE:  THERE ARE MUCH FASTER WAYS TO DO THIS IF HARDWARE
*            DOUBLE PRECISION IS NOT AVAILABLE. (DLB) 
      SPC 1 
TDB   NOP 
      DEC 11
      NOP 
X1    REP 3 
      NOP 
R     REP 3 
      NOP 
Y     NOP 
X     NOP 
      SPC 1 
DSQRT NOP 
      JSB .ZRNT 
      DEF LIBX
      JSB .ENTP 
      DEF Y 
      STA TDB+2 
      JSB SNGL      PACK ARGUMENT TO SINGLE 
      DEF *+2        PRECISION. 
      DEF X,I 
      JSB SQRT      FIND FIRST APPROX. TO SQRT
      JMP LIBX      ERROR RETURN Y<0
      STA R 
      STB R+1 
      STA R+2       SET FOR POSSIBLE ZERO 
      SZA,RSS       EQUAL 0?
      JMP PZERO     YES SET Y=0 
      JSB DBLE      EXTEND APPROXIMATION
      DEF *+3 
      DEF R         APPROX = R
      DEF R 
      JSB .XDIV      X1 = X/R 
      DEF X1
      DEF X,I 
      DEF R 
      NOP           GIVE THE INTERRUPTS A CHANCE
      JSB .XADD 
      DEF R         R = X1 + R
      DEF X1
      DEF R 
      NOP           GIVE THE INTERRUPTS A CHANCE
PZERO JSB .XMPY     DIVIDE BY 2 
      DEF Y,I       RETURN PRAM TO CALLER 
      DEF R         TEMP STORAGE
      DEF D.5       MULT BY .5
      ISZ TDB+2     RETURN P+4
LIBX  JMP TDB+2,I 
      DEF TDB 
      DEC 0 
      SPC 1 
D.5   DEX 0.5 
      END 
* 
                