File: SQRTMS.LS of Disk: V50/Source/Source-Listing-RALF-1
(Source file text) 


RALF V50A    8-APR-92    PAGE 1

            /R=SQRT(R) SINGLE PREC. SQUARE ROOT
            /
            /
            / VERSION 50A 20-MAY-80 WVDM GOOD FOR M&S FPP
            /
            /
                    SECT    SQRT
00000 1030          JA      #SQRT
00001 0074  
00002 0000          0                       /THE MANTISSA AND EXPONENT DIDDLE AREAS.
00003 0000          0
00004 0000  SQRTEX, 0
00005 0000          0
00006 0000  SQRT13, 0
00007 0000          0
00010 0013          13                      /PHONEY EXPONENT PATCH.
            /
                    EXTERN  #ARGER
00011 4000  SQRTM1, TRAP4   #ARGER
00012 0000  
00013 2321          TEXT    +SQRT  +
00014 2224  
00015 4040  
00016 1100  SQRTXR, SETX    XRSQRT
00017 0025  
00020 1110          SETB    BPSQRT
00021 0022  
00022 0000  BPSQRT, F 0.0
00023 0000  
00024 0000  
00025 0000  XRSQRT, F 0.0
00026 0000  
00027 0000  
00030 0000  SQRT1,  F 0.0
00031 0000  
00032 0000  
00033 0000  SQRT2,  F 0.0
00034 0000  
00035 0000  
00036 0000  SQRT3,  F 0.0
00037 0000  
00040 0000  
00041 0001  F1SQRT, F 1.
00042 2000  
00043 0000  
00044 0002  F2SQRT, F 2.
00045 2000  
00046 0000  
                    ORG     10*3+BPSQRT
00052 0040          FNOP
00053 1030          JA SQRTXR
00054 0016  
00055 0000          0
00056 1030  SQTRTN, JA      .
00057 0056  
00060 0000  SQRTS1, 0                       /IF BETWEEN 1/4 & 1/2
RALF V50A    8-APR-92    PAGE 1-1

00061 3200          3200
00062 0000          0
00063 0000          0                       /IF BETWEEN 1/2 & 1
00064 2240          2240
00065 0000          0
            /
00066 7777  SQRTS2, 7777                    /IF BETWEEN 1/4 & 1/2
00067 2327          2327
00070 7772          7772
00071 7777          7777                    /IF BETWEEN 1/2 & 1
00072 3300          3300
00073 0000          0
                    BASE    0
00074 0006  #SQRT,  STARTD
00075 0210          FLDA    10*3
00076 6400          FSTA    SQTRTN
00077 0056  
00100 0200          FLDA    0
00101 1100          SETX    XRSQRT
00102 0025  
00103 1110          SETB    BPSQRT
00104 0022  
                    BASE    BPSQRT
00105 0101          LDX     1,1
00106 0001  
00107 6200          FSTA    BPSQRT
00110 0610          FLDA%   BPSQRT,1        /ADDR OF X
00111 6200          FSTA    BPSQRT
00112 0005          STARTF
00113 0600          FLDA%   BPSQRT          /GET X
00114 1000          JEQ     SQTRTN          /IF =0 JUST RTN
00115 0056  
00116 1050          JLT     SQRTM1          /IF <0 THEN ERROR
00117 0011  
00120 6400          FSTA    SQRTEX+1        /SAVE NUMBER AWAY FOR A SECOND.
00121 0005  
00122 2205          FSUB    F1SQRT          /.LT. 1 ?
00123 1010          JGE     SQPOSR
00124 0134  
00125 0101          LDX     0,1             /REMEMBER LT 1
00126 0000  
00127 0205          FLDA    F1SQRT          /INVERT
00130 3400          FDIV    SQRTEX+1
00131 0005  
00132 6400          FSTA    SQRTEX+1
00133 0005  
00134 0400  SQPOSR, FLDA    SQRT13          /GET A RIGHT ADJUSTED 13 IN THE FAC.
00135 0006  
00136 6400          FSTA    SQRTEX-2        /STORE AWAY RIGHT AHEAD OF THE EXPONENT.
00137 0002  
00140 0400          FLDA    SQRTEX          /NOW RETREIVE THE EXPONENT AS HIGH ORDER WORD.
00141 0004  
00142 0010          ALN     0               /CHOP OFF CRAP.
00143 0004          FNORM                   /NORMALIZE IT.
00144 2205          FSUB    F1SQRT          /NOW SUBTRACT ONE FROM IT.
00145 3206          FDIV    F2SQRT          /CHOP IT IN HALF NOW.
RALF V50A    8-APR-92    PAGE 1-2

00146 6203          FSTA    SQRT2           /AND SAVE 1/2 EXP IN A TEMP.
00147 0010          ALN     0               /NOW FIX THE EXPONENT.
00150 6202          FSTA    SQRT1           /SAVE FIXED-UP EXP FOR LATER
00151 0004          FNORM                   /AND NORMALIZE IT TO REMOVE UNDESIRABLE BITS.
00152 2203          FSUB    SQRT2           /NOW SUBTRACT OFF EXTRANEOUS BITS.
00153 4206          FMUL    F2SQRT          /EXPAND IT AGAIN [FAC =0 OR -1]
00154 0003          FNEG                    /NOW MAKE IT 0 IF NO BIT OR +1 IF BIT
00155 0022  SQRTBK, ATX     2               /SAVE IN AN INDEX.
00156 2205          FSUB    F1SQRT          /SUBTRACT 1 FOR  -1 IF NO BIT OR 0 IF BIT.
00157 0010          ALN     0               /AND NOW SHIFT IT RIGHT.
00160 6400          FSTA    SQRTEX-1        /AND SAVE IT OVER THE OLD EXPONENT.
00161 0003  
            /
            /               SQRTEX IS NOW 1/4 <X< 1
            /
00162 0400          FLDA    SQRTEX+1        /RECALL NUMBER.
00163 0005  
00164 6203          FSTA    SQRT2           /SAVE IN A TEMP.
            /
00165 4420          FMUL    SQRTS1,2        /MULTIPLY BY CORRECT CONSTANT.
00166 0060  
00167 1420          FADD    SQRTS2,2        /AND NOW ADD IN CORRECT CONSTANT.
00170 0066  
            /
            /       NOTE: INITIAL APPROXIMATION DEPENDS ON WHETHER X IS 1/4<X<1/2 OR
            /                    1/2<X<1
            /
00171 6204          FSTA    SQRT3           /SAVE IN A SECOND TEMP.
00172 0203          FLDA    SQRT2           /RECALL INITIAL.
00173 3204          FDIV    SQRT3           /CALCULATE X(0)/X(1)
00174 1204          FADD    SQRT3           /X(1)+X(0)/X(1)
00175 3206          FDIV    F2SQRT          /1/2(X(1)+X(0)/X(1))
00176 6204          FSTA    SQRT3           /SAVE AGAIN. NOW X(2)
00177 0203          FLDA    SQRT2           /RECALL ORIGINAL.
00200 3204          FDIV    SQRT3           /X(0)/X(2)
00201 1204          FADD    SQRT3           /X(2)+X(0)/X(2)
00202 6400          FSTA    SQRTEX+1        /NOW STORE AWAY FOR FINAL EXPONENT DIDDLING.
00203 0005  
            /
00204 0006          STARTD
00205 0002          FCLA                    /ZERO HIGH ORDER EXPONENT PART.
00206 6400          FSTA    SQRTEX-1
00207 0003  
00210 0202          FLDA    SQRT1           /RECALL MODIFIED EXPONENT.
00211 1400          FADD    SQRTEX          /UPDATE FRACTIONAL EXPONENT.
00212 0004  
00213 6400          FSTA    SQRTEX
00214 0004  
            /
00215 0005          STARTF                  /RETURN TO FLOATING MODE.
00216 2010          JXN     SQEXPO,1        /WAS IT .GE. 1 ?
00217 0225  
00220 0205          FLDA    F1SQRT          /NO, INVERT
00221 3400          FDIV    SQRTEX+1        /SQRT(1/X)=1/SQRT(X)
00222 0005  
00223 1030          JA      SQTRTN          /AND RTN
RALF V50A    8-APR-92    PAGE 1-3

00224 0056  
            /
00225 0400  SQEXPO, FLDA    SQRTEX+1        /PICK UP THE ANSWER DIRECTLY
00226 0005  
00227 1030          JA      SQTRTN          /AND RTN
00230 0056  
RALF V50A    8-APR-92    PAGE 2

            
RALF V50A    8-APR-92    PAGE 2-1

NO ERRORS 
20 SYMBOLS, NO ABS REFS 

 #      C 00000   #ARGER X 00000   #MAIN  S 00000   #SQRT    00074  
 BPSQRT   00022   F1SQRT   00041   F2SQRT   00044   SQEXPO   00225  
 SQPOSR   00134   SQRT   S 00231   SQRTBK   00155   SQRTEX   00004  
 SQRTM1   00011   SQRTS1   00060   SQRTS2   00066   SQRTXR   00016  
 SQRT1    00030   SQRT13   00006   SQRT2    00033   SQRT3    00036  
 SQTRTN   00056   XRSQRT   00025