*DECK     SQRT
          IDENT  P.SQRT 
          B1=1
          ENTRY  P.SQRT 
 SQRT     SPACE  4,10 
 SQRT     TITLE  SQRT - SQUARE ROOT OF ARGUMENT.
          COMMENT PASCAL 6000 SQUARE ROOT ROUTINE.
          COMMENT COPYRIGHT (C) UNIVERSITY OF MINNESOTA - 1978. 
 SQRT     SPACE  4,10 
***       SQRT - SQUARE ROOT OF ARGUMENT. 
*         L. A. LIDDIARD.    CIRCA 1970.
*         D. M. LALIBERTE.   76/08/25.
* BRING DOCUMENTATION UP TO CODING STANDARDS. 
 SQRT     SPACE  4,20 
***       SQRT - SQUARE ROOT OF ARGUMENT. 
* 
*         ENTRY  (B1) = 1.
*                (X1) = ARGUMENT. 
* 
*         EXIT   (X6) = SQUARE ROOT OF ARGUMENT.
* 
*         USES   A - 4, 5.
*                B - 3, 7.
*                X - ALL. 
* 
*         CALLS  P.SABRT. 
* 
*         MACROS NONE.
* 
*         ALGORITHM AND CONSTANTS COPYRIGHT CONTROL DATA CORPORATION. 
* 
*         RELATIVE ACCURACY (I.E. ERROR/RESULT) 
*         AVERAGE  =  1.6E-15 IN THE RANGE      0  BY   .01    TO 100.0 
*         WORST    =    4E-15 IN THE RANGE      0  BY   .01    TO 100.0 
* 
*         OPTIMIZED FOR CDC 6600 (OR 6700), OR CDC CYBER 74 COMPUTERS.
  
  
 P.SQRT   PS                 ENTRY/EXIT 
          UX6,B3 X1          B3 = N-48
          SB7    -48
          PX7    X1,B7       W*2(-48) 
          SA5    SRTC        LOAD CA
          FX0    X5*X7       CA*W 
          SX3    B3-B7       N-48-(-48) = N = 2*K+R 
          SA4    SRTD        LOAD CB
          BX6    X3 
          FX2    X4+X0       CA*W+CB = INITIAL GUESS = B
          AX6    1           K = N/2
          IX3    X3-X6       N-K
          FX4    X2*X2       B*B
          IX3    X3-X6       N-K-K = R
          FX0    X4+X7       B*B+W
          SB7    X6          B7 = K 
          SA5    X3+SRTF     LOAD 2.0**(R/2)*2(-1)
          FX3    X2*X0       B*(B*B+W) = DENOM
          UX2,B3 X5 
          SB7    B7+B3       INCORPORATE K INTO EXPONENT OF 
          PX2    X2,B7       2(K)*2(R/2)*2(-1)
          FX7    X7+X7       2*W
          NX6    X3          NORMALIZE DENOM
          FX2    X2/X6       (2(K)*2(R/2)*2(-1))/DENOM = TERM1
          BX3    X1 
          FX5    X0*X0       (B*B+W)**2 
          FX7    X7+X7       4*W
          LX3    2           MOVE TO 1ST BIT OF EXP COEFFICENT
          FX4    X7*X4       4*W*B*B
          FX7    X5+X4       NUM = (B*B+W)**2+4*W*B*B 
          AX3    50          X3 = COEFFICIENT BITS OF EXPONENT
          FX2    X7*X2       NUM*TERM1 = 2*U
          BX6    X6-X6       POSITIVE ZERO RESULT 
          SA5    SRTE        LOAD .25 
          ZR     X3,SRT3     IF BITS OF EXPONENT IDENTICAL
 SRT1     NX0    X2 
          FX3    X1/X0       ARG/(2*U)
          FX4    X5*X0       25*(2*U) 
          FX6    X3+X4       SUM = SQRT(ARG)
          PL     X1,P.SQRT   IF POSITIVE ARGUMENT, RETURN 
          SX0    SRTB 
          EQ     SRT4        ABORT
  
 SRT3     ZR     X1,P.SQRT   RETURN IF ZERO ARGUMENT
          SX0    SRTA 
          ID     X1,SRT4     IF INDEFINITE ARGUMENT 
          IR     X1,SRT1     IF IN RANGE AFTER ALL
 SRT4     EQ     =XP.SABRT   ABORT
  
 SRTA     DATA   C* INFINITE OR INDEF ARGUMENT OF SQRT.*
  
 SRTB     DATA   C* NEGATIVE ARGUMENT OF SQRT.* 
  
 SRTC     DATA   0.585786437   CA 
  
 SRTD     DATA   0.4204951288  CB 
  
 SRTE     DATA   17164000000000000001B
  
          DATA   0.353553390593 
 SRTF     DATA   0.5
          DATA   0.707106781186 
 SQRT     SPACE  4
          END 
