File: DEXP.RA of Tape: Sources/Fortran/os8-f4-3
(Source file text)
/D=DEXP(D) DOUBLE PREC. EXPONENTIAL / / / VERSION 40A 28-MAY-80 WVDM / / /E^X=2^(X*LOG2(E)) /E^X=2^(M+F) /M=INTEGER; F=FRACTION / /2^(M+F)=2^(M+N+R) /WHERE 0<R<1/8 /AND M+N+R=M+F=X*LOG2(E) / /(2^M)*(2^N)*(2^R)=E^X / /2^M IS CALCULATED BY SUCCESSIVE MULTIPLIES /2^N IS CALCULATED BY LOOK UP /2^R=1+<A4/((B4/R)-C4+(D4*R)+(H4/(R+(B4/R))))> / /RESTRICTIONS: /X=0 IMPLIES E^X=1 / / SECT DEXP JA #DEXP DPCHK TEXT +DEXP + DEXPXR, SETX XRDEXP SETB BPDEXP BPDEXP, F 0.0 XRDEXP, F 0.0 X, F 0.0 F 0.0 DTEMP1, F 0.0 F 0.0 DFP2, F 2.0 F 0.0 ORG 10*3+BPDEXP FNOP JA DEXPXR 0 DEXRTN, JA . / M, F 0.0 F 0.0 N, F 0.0 F 0.0 R, F 0.0 F 0.0 / LOG2E, 0001 /1.4426950408889634 2705 2435 4512 7013 7603 / DFP125, 7775 /.125 3777 7777 7777 7777 7776 / DEXFP1, F 1.0 /2^0/8 F 0.0 / DFR1S8, 0001 /2^1/8 2134 5340 7437 2505 7302 / DFP2S8, 0001 /2^2/8 2301 5770 1214 3334 2524 / DFP3S8, 0001 /2^3/8 2457 7553 2515 4250 4720 / DFP4S8, 0001 /2^4/8 2650 1171 4637 6357 1425 / DFP5S8, 0001 /2^5/8 3053 1625 0212 5174 3070 / DFP6S8, 0001 /2^6/8 3272 1176 3126 5516 5532 / DFP7S8, 0001 /2^7/8 3526 0143 3476 7222 0722 / DEXA4, 0006 /60.593191717336463 3622 7666 6462 2157 5534 / DEXB4, 0007 /87.417497202235527 2566 5341 0613 6705 7214 / DEXC4, 0005 /30.296595858668232 3622 7666 6462 2157 5546 / DEXD4, 0001 /1.0500 2063 1463 1463 1463 1462 / DEXH4, 0010 /214.17286814547704 3261 3040 4261 5654 0240 / BASE 0 #DEXP, STARTD FLDA 10*3 FSTA DEXRTN FLDA 0 SETX XRDEXP SETB BPDEXP BASE BPDEXP LDX 1,1 LDX 73,2 /FOR ALIGNING FSTA BPDEXP FLDA% BPDEXP,1 /ADDRESS OF X FSTA BPDEXP STARTE FLDA% BPDEXP /GET X LDX 0,0 JGT DEX1 /CHECK SIGN FNEG LDX -1,0 /SET FLAG DEX1, JNE DEX2 /X=0 FLDA DEXFP1 /E^0=1 JA DEXRTN DEX2, FSTA X JA DEX4 DEX3, FCLA JA DEXRTN /RETURN 0 FOR TOO SMALL / /SET UP M+N+R=X*LOG2(E) DEX4, FLDA LOG2E FMUL X FSTA X FLDA X ALN 2 /FIX FNORM /FLOAT FSTA M /INTEGER PART FLDA X FSUB M FSTA N /FRACTION JNE DEX50 /0 IS SPECIAL CASE FLDA DEXFP1 /1.0 FSTA N /N FSTA R /R JA DEX20 /SKIP / /CALCULATE N+R DEX50, LDX 0,1 FLDA N FSTA R /IF < .125 ALREADY DEX5, FSUB DFP125 /-.125 JLT DEX6 /DONE IF .LT. FSTA R /STORE REMAINDER ADDX 1,1 /NEXT POWER OF 2 JA DEX5 /AND AGAIN / /GET N FROM TABLE DEX6, FLDA DEXFP1,1 FSTA N / /NOW CALCULATE R FLDA R /IF R=0 JNE DEX7 FLDA DEXFP1 /2^R=1 FSTA R JA DEX20 /NO CALCULATION / / DEX7, FLDA DEXB4 FDIV R /(B4/R) FSTA X FLDA DEXD4 /D4*R FMUL R FADD X /+(B4/R) FSUB DEXC4 /-C4 FSTA DTEMP1 FLDA R FADD X /R+(B4/R) FSTA R FLDA DEXH4 FDIV R /H4/(R+B4/R) FADD DTEMP1 FSTA DTEMP1 FLDA DEXA4 FDIV DTEMP1 FADD DEXFP1 FSTA R / /CALCULATE 2^M / DEX20, FLDA M JNE DEX21 FLDA DEXFP1 JA DEX23 DEX21, FNEG ATX 1 FLDA DEXFP1 DEX22, FMUL DFP2 JXN DEX22,1+ DEX23, FSTA M /M*2 / /CALCULATE M*N*R / DEX30, FLDA M FMUL N FMUL R FSTA X JXN DEX31,0 /WAS X MINUS JA DEXRTN DEX31, FLDA DEXFP1 /.1/X IF -X FDIV X JA DEXRTN