| 1 | / |
| 2 | / |
| 3 | / SUBROUTINE DEXP |
| 4 | / |
| 5 | / VERSION 5A 4-26-77 MH |
| 6 | / |
| 7 | /E^X=2^(X*LOG2(E)) |
| 8 | /E^X=2^(M+F) |
| 9 | /M=INTEGER; F=FRACTION |
| 10 | / |
| 11 | /2^(M+F)=2^(M+N+R) |
| 12 | /WHERE 0<R<1/8 |
| 13 | /AND M+N+R=M+F=X*LOG2(E) |
| 14 | / |
| 15 | /(2^M)*(2^N)*(2^R)=E^X |
| 16 | / |
| 17 | /2^M IS CALCULATED BY SUCCESSIVE MULTIPLIES |
| 18 | /2^N IS CALCULATED BY LOOK UP |
| 19 | /2^R=1+<A4/((B4/R)-C4+(D4*R)+(H4/(R+(B4/R))))> |
| 20 | / |
| 21 | /RESTRICTIONS: |
| 22 | /X=0 IMPLIES E^X=1 |
| 23 | / |
| 24 | /X>88.028 IMPLIES E^X=3377/3377/3777/7777/777/7777 |
| 25 | / |
| 26 | /X<-88.028 IMPLIES E^X=0 |
| 27 | / |
| 28 | / |
| 29 | / |
| 30 | SECT DEXP |
| 31 | JA #DEXP |
| 32 | DPCHK |
| 33 | TEXT +DEXP + |
| 34 | / |
| 35 | DEXPXR, SETX XRDEXP |
| 36 | SETB BPDEXP |
| 37 | / |
| 38 | /BEGINNING OF BASE PAGE |
| 39 | / |
| 40 | BPDEXP, F 0.0 |
| 41 | XRDEXP, F 0.0 |
| 42 | X, F 0.0 |
| 43 | F 0.0 |
| 44 | / |
| 45 | ORG 10*3+BPDEXP |
| 46 | FNOP |
| 47 | JA DEXPXR |
| 48 | 0 |
| 49 | DEXRTN, JA . |
| 50 | / |
| 51 | TOPLIM, 3377 |
| 52 | 3377 |
| 53 | 3777 |
| 54 | 7777 |
| 55 | 7777 |
| 56 | 7777 |
| 57 | M, F 0.0 |
| 58 | F 0.0 |
| 59 | N, F 0.0 |
| 60 | F 0.0 |
| 61 | R, F 0.0 |
| 62 | F 0.0 |
| 63 | LOG2E, 0001 /1.4426950408889634 |
| 64 | 2705 |
| 65 | 2435 |
| 66 | 4512 |
| 67 | 7013 |
| 68 | 7603 |
| 69 | DFP125, 7775 /.125 |
| 70 | 3777 |
| 71 | 7777 |
| 72 | 7777 |
| 73 | 7777 |
| 74 | 7776 |
| 75 | DEXFP1, F 1.0 |
| 76 | F 0.0 |
| 77 | / |
| 78 | DFR1S8, 0001 /2^1/8 |
| 79 | 2134 |
| 80 | 5340 |
| 81 | 7437 |
| 82 | 2505 |
| 83 | 7302 |
| 84 | DFP2S8, 0001 /2^2/8 |
| 85 | 2301 |
| 86 | 5770 |
| 87 | 1214 |
| 88 | 3334 |
| 89 | 2524 |
| 90 | DFP3S8, 0001 /2^3/8 |
| 91 | 2457 |
| 92 | 7553 |
| 93 | 2515 |
| 94 | 4250 |
| 95 | 4720 |
| 96 | DFP4S8, 0001 /2^4/8 |
| 97 | 2650 |
| 98 | 1171 |
| 99 | 4637 |
| 100 | 6357 |
| 101 | 1425 |
| 102 | DFP5S8, 0001 /2^5/8 |
| 103 | 3053 |
| 104 | 1625 |
| 105 | 0212 |
| 106 | 5174 |
| 107 | 3070 |
| 108 | DFP6S8, 0001 /2^6/8 |
| 109 | 3272 |
| 110 | 1176 |
| 111 | 3126 |
| 112 | 5516 |
| 113 | 5532 |
| 114 | DFP7S8, 0001 /2^7/8 |
| 115 | 3526 |
| 116 | 0143 |
| 117 | 3476 |
| 118 | 7222 |
| 119 | 0722 |
| 120 | / |
| 121 | / |
| 122 | DEXA4, 0006 /60.593191717336463 |
| 123 | 3622 |
| 124 | 7666 |
| 125 | 6462 |
| 126 | 2157 |
| 127 | 5534 |
| 128 | DEXB4, 0007 /87.417497202235527 |
| 129 | 2566 |
| 130 | 5341 |
| 131 | 0613 |
| 132 | 6705 |
| 133 | 7214 |
| 134 | DEXC4, 0005 /30.296595858668232 |
| 135 | 3622 |
| 136 | 7666 |
| 137 | 6462 |
| 138 | 2157 |
| 139 | 5546 |
| 140 | DEXD4, 0001 /1.0500 |
| 141 | 2063 |
| 142 | 1463 |
| 143 | 1463 |
| 144 | 1463 |
| 145 | 1462 |
| 146 | DEXH4, 0010 /214.17286814547704 |
| 147 | 3261 |
| 148 | 3040 |
| 149 | 4261 |
| 150 | 5654 |
| 151 | 0240 |
| 152 | DTEMP1, F 0.0 |
| 153 | F 0.0 |
| 154 | DFP2, F 2.0 |
| 155 | F 0.0 |
| 156 | / |
| 157 | BASE 0 |
| 158 | #DEXP, STARTD |
| 159 | FLDA 10*3 |
| 160 | FSTA DEXRTN |
| 161 | FLDA 0 |
| 162 | SETX XRDEXP |
| 163 | SETB BPDEXP |
| 164 | BASE BPDEXP |
| 165 | LDX 1,1 |
| 166 | LDX 73,2 /FOR ALIGNING |
| 167 | FSTA BPDEXP |
| 168 | FLDA% BPDEXP,1 /ADDRESS OF X |
| 169 | FSTA BPDEXP |
| 170 | STARTE |
| 171 | FLDA% BPDEXP /GET X |
| 172 | LDX 0,0 |
| 173 | JGT DEX1 /CHECK SIGN |
| 174 | FNEG |
| 175 | LDX -1,0 /SET FLAG |
| 176 | DEX1, JNE DEX2 /X=0 |
| 177 | FLDA DEXFP1 /E^0=1 |
| 178 | JA DEXRTN |
| 179 | DEX2, FSTA X |
| 180 | JA DEX4 |
| 181 | DEX3, FCLA |
| 182 | JA DEXRTN /RETURN 0 FOR TOO SMALL |
| 183 | / |
| 184 | /SET UP M+N+R=X*LOG2(E) |
| 185 | DEX4, FLDA LOG2E |
| 186 | FMULM X |
| 187 | FLDA X |
| 188 | ALN 2 /FIX |
| 189 | FNORM /FLOAT |
| 190 | FSTA M /INTEGER PART |
| 191 | FLDA X |
| 192 | FSUB M |
| 193 | FSTA N /FRACTION |
| 194 | JNE DEX50 /0 IS SPECIAL CASE |
| 195 | FLDA DEXFP1 /1.0 |
| 196 | FSTA N /N |
| 197 | FSTA R /R |
| 198 | JA DEX20 /SKIP |
| 199 | / |
| 200 | /CALCULATE N+R |
| 201 | DEX50, LDX 0,1 |
| 202 | FLDA N |
| 203 | FSTA R /IF < .125 ALREADY |
| 204 | DEX5, FSUB DFP125 /-.125 |
| 205 | JLT DEX6 /DONE IF .LT. |
| 206 | FSTA R /STORE REMAINDER |
| 207 | ADDX 1,1 /NEXT POWER OF 2 |
| 208 | JA DEX5 /AND AGAIN |
| 209 | / |
| 210 | /GET N FROM TABLE |
| 211 | DEX6, FLDA DEXFP1,1 |
| 212 | FSTA N |
| 213 | / |
| 214 | /NOW CALCULATE R |
| 215 | FLDA R /IF R=0 |
| 216 | JNE DEX7 |
| 217 | FLDA DEXFP1 /2^R=1 |
| 218 | FSTA R |
| 219 | JA DEX20 /NO CALCULATION |
| 220 | / |
| 221 | / |
| 222 | DEX7, FLDA DEXB4 |
| 223 | FDIV R /(B4/R) |
| 224 | FSTA X |
| 225 | FLDA DEXD4 /D4*R |
| 226 | FMUL R |
| 227 | FADD X /+(B4/R) |
| 228 | FSUB DEXC4 /-C4 |
| 229 | FSTA DTEMP1 |
| 230 | FLDA R |
| 231 | FADD X /R+(B4/R) |
| 232 | FSTA R |
| 233 | FLDA DEXH4 |
| 234 | FDIV R /H4/(R+B4/R) |
| 235 | FADD DTEMP1 |
| 236 | FSTA DTEMP1 |
| 237 | FLDA DEXA4 |
| 238 | FDIV DTEMP1 |
| 239 | FADD DEXFP1 |
| 240 | FSTA R |
| 241 | / |
| 242 | /CALCULATE 2^M |
| 243 | / |
| 244 | DEX20, FLDA M |
| 245 | JNE DEX21 |
| 246 | FLDA DEXFP1 |
| 247 | FSTA M |
| 248 | JA DEX30 |
| 249 | DEX21, FNEG |
| 250 | ATX 1 |
| 251 | FLDA DEXFP1 |
| 252 | FSTA M |
| 253 | FLDA DFP2 |
| 254 | DEX22, FMULM M /M*2 |
| 255 | JXN DEX22,1+ |
| 256 | /CALCULATE M*N*R |
| 257 | DEX30, FLDA M |
| 258 | FMUL N |
| 259 | FMUL R |
| 260 | FSTA X |
| 261 | JXN DEX31,0 /WAS X MINUS |
| 262 | JA DEXRTN |
| 263 | DEX31, FLDA DEXFP1 /.1/X IF -X |
| 264 | FDIV X |
| 265 | JA DEXRTN |
| 266 | \f\1e |