File: SQRT.LS of Disk: V50/Source/Source-Listing-RALF-1
(Source file text)
RALF V50A 8-APR-92 PAGE 1 / / S Q R T / - - - - / /SUBROUTINE SQRT(X) / / VERSION 5A 4-27-77 PT / SECT SQRT 00000 1030 JA #SQRT 00001 0074 00002 0000 0 /THE MANTISSA ND EXPOENT 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 . RALF V50A 8-APR-92 PAGE 1-1 00057 0056 00060 0000 SQRTS1, 0 /IF BETWEEN 1/4 & 1/2 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 0400 FLDA SQRT13 /GET A RIGHT ADJUSTED 13 IN THE FAC. 00123 0006 00124 6400 FSTA SQRTEX-2 /STORE AWAY RIGHT AHEAD OF THE EXPONENT. 00125 0002 00126 0400 FLDA SQRTEX /NOW RETREIVE THE EXPONENT AS HIGH ORDER WORD. 00127 0004 00130 0010 ALN 0 /CHOP OFF CRAP. 00131 1000 JEQ SQRTSC /IS IT EXACTLY ZERO? IF SO, SPECIAL CASE. 00132 0214 00133 0004 FNORM /NORMALIZE IT. 00134 2205 FSUB F1SQRT /NOW SUBTRACT ONE FROM IT. 00135 3206 FDIV F2SQRT /CHOP IT IN HALF NOW. 00136 6202 FSTA SQRT1 /AND SAVE 1/2 EXP IN A TEMP. 00137 0010 ALN 0 /NOW FIX THE EXPONENT. 00140 0004 FNORM /AND NORMALIZE IT TO REMOVE UNDESIRABLE BITS. 00141 2202 FSUB SQRT1 /NOW SUBTRACT OFF EXTRANEOUS BITS. 00142 4206 FMUL F2SQRT /EXPAND IT AGAIN [FAC =0 OR -1], OR 0 TO +1 00143 1010 JGE .+3 /MAKE SURE ITS POSITIVE. RALF V50A 8-APR-92 PAGE 1-2 00144 0146 00145 0003 FNEG /NOW MAKE IT 0 IF NO BIT OR +1 IF BIT 00146 0021 SQRTBK, ATX 1 /SAVE IN AN INDEX. 00147 2205 FSUB F1SQRT /SUBTRACT ONE TO MAKE IT -1 IF NO BIT OR 0 IF BIT. 00150 0010 ALN 0 /AND NOW SHIFT IT RIGHT. 00151 6400 FSTA SQRTEX-1 /AND SAVE IT OVER THE OLD EXPONENT. 00152 0003 00153 0202 FLDA SQRT1 /RECALL OLD PART 00154 0010 ALN 0 /FIX IT UP, NOW. 00155 6202 FSTA SQRT1 /AND STORE IT BACK FOR LATER USE / / SQRTEX IS NOW 1/4 <X< 1 / 00156 0400 FLDA SQRTEX+1 /RECALL NUMBER. 00157 0005 00160 6203 FSTA SQRT2 /SAVE IN A TEMP. / 00161 4410 FMUL SQRTS1,1 /MULTIPLY BY CORRECT CONSTANT. 00162 0060 00163 1410 FADD SQRTS2,1 /AND NOW ADD IN CORRECT CONSTANT. 00164 0066 / / NOTE: INITIAL APPROXIMATION DEPENDS ON WHETHER X IS 1/4<X<1/2 OR / 1/2<X<1 / 00165 6204 FSTA SQRT3 /SAVE IN A SECOND TEMP. 00166 0203 FLDA SQRT2 /RECALL INITIAL. 00167 3204 FDIV SQRT3 /CALCULATE X(0)/X(1) 00170 1204 FADD SQRT3 /X(1)+X(0)/X(1) 00171 3206 FDIV F2SQRT /1/2(X(1)+X(0)/X(1)) 00172 6204 FSTA SQRT3 /SAVE AGAIN. NOW X(2) 00173 0203 FLDA SQRT2 /RECALL ORIGINAL. 00174 3204 FDIV SQRT3 /X(0)/X(2) 00175 1204 FADD SQRT3 /X(2)+X(0)/X(2) 00176 6400 FSTA SQRTEX+1 /NOW STORE AWAY FOR FINAL EXPONENT DIDDLING. 00177 0005 / 00200 0006 STARTD / 00201 0002 FCLA /ZERO HIGH ORDER EXPONENT PART. 00202 6400 FSTA SQRTEX-1 00203 0003 00204 0202 FLDA SQRT1 /RECALL MODIFIED EXPONENT. 00205 5400 FADDM SQRTEX /UPDATE FRACTIONAL EXPONENT. 00206 0004 / 00207 0005 STARTF /RETRUN TO FLOATING MODE. / 00210 0400 FLDA SQRTEX+1 /PICK UP THE ANSWER. 00211 0005 00212 1030 JA SQTRTN /AND RTN 00213 0056 / 00214 2205 SQRTSC, FSUB F1SQRT /SPECIAL CASE FUDGE. 00215 6202 FSTA SQRT1 /SET EXPONENT ADD ON TO -1. 00216 0003 FNEG /AND SET ODD BIT ON. RALF V50A 8-APR-92 PAGE 1-3 00217 1030 JA SQRTBK /AND GO BACK UP. 00220 0146 RALF V50A 8-APR-92 PAGE 1-4 NO ERRORS 19 SYMBOLS, NO ABS REFS # C 00000 #ARGER X 00000 #MAIN S 00000 #SQRT 00074 BPSQRT 00022 F1SQRT 00041 F2SQRT 00044 SQRT S 00221 SQRTBK 00146 SQRTEX 00004 SQRTM1 00011 SQRTSC 00214 SQRTS1 00060 SQRTS2 00066 SQRTXR 00016 SQRT1 00030 SQRT13 00006 SQRT2 00033 SQRT3 00036 SQTRTN 00056 XRSQRT 00025