File: EXP.RA of Tape: OS8/OS8-Latest/new-10
(Source file text)
/R=EXP(R) SINGLE PREC. EXPONENTIAL FUNCTION / / / VERSION 40A 26-MAY-80 WVDM / / SECT EXP JA #EXP 0 EXPFUD, 0 0 0 / EXTERN #ARGER EXPER, TRAP4 #ARGER TEXT +EXP + EXPXR, SETX XREXP SETB BPEXP BPEXP, F 0.0 XREXP, F 0.0 EXP1, F 0.0 EXP2, F 0.0 EXP33, F 0.0 EXP4, F 0.0 F1EXP, F 1. F2EXP, F 2. ORG 10*3+BPEXP FNOP JA EXPXR 0 EXPRTN, JA . / EXPAF, 4 /9.95459 2372 1402 / EXPBF, 7774 /.03465735 2157 5157 / EXPCF, 12 /-617.9723 5454 0343 / EXPDF, 7 /87.417496 2566 5341 / EXP2E, 1 /1.4426949 = 1/LN(2) 2705 2435 / BASE 0 #EXP, STARTD FLDA 10*3 FSTA EXPRTN FLDA 0 SETX XREXP SETB BPEXP BASE BPEXP LDX 1,1 FSTA BPEXP FLDA% BPEXP,1 /ADDR OF X FSTA BPEXP STARTF FLDA% BPEXP /GET X LDX -1,0 /PRESERVE SIGN. JGE .+5 FNEG /IF NEGATIVE NEGATE IT. LDX 0,0 /AND REMEMBER IT,BUBBY. FMUL EXP2E /MULTIPLY TO BINARY TYPE. FSTA EXP1 /AND SAVE IT AWAY. JAL EXPER /CAN'T FIX IT, ERROR. ALN 0 /FIX IT UP. FSTA EXP33 /AND SAVE IT. FNORM /NOW NORMALIZE FOR OUR COMPUTATIONS. FNEG /NEGATE THE FAC FADD EXP1 /ADD IN BEFORE NORMAL. FSTA EXP1 /AND STORE BACK. FMUL EXP1 /NOW SQUARE IT. FSTA EXP2 /AND SAVE IT. FADD EXPDF /START THE ITERATION. FSTA EXP4 /X^2+D FLDA EXPCF /NEXT CONSTANT. FDIV EXP4 /C/(X^2+D) FSUB EXP1 /(C/(X^2+D))-X FADD EXPAF /NEXT CONSTANT. FSTA EXP4 /(C/(X^2+D))-X+A FLDA EXPBF /NEXT CONSTANT FMUL EXP2 /B*X^2 FADD EXP4 FSTA EXP4 /A-X+B*X^2+C/(X^2+D) FLDA EXP1 FDIV EXP4 /X/[A-X+B*X^2+C/(X^2+D)] FMUL F2EXP FADD F1EXP /1+2*X/[A-X+B*X^2+C/(X^2+D)] FSTA EXPFUD /NOW FIDDLE THE EXPONENT. STARTD FLDA EXP33 FADD EXPFUD-1 /EXPONENT UPDATE. FSTA EXPFUD-1 STARTF FLDA EXPFUD /TEST FOR M&S OVERFLOW FMUL F1EXP /FORCE OPERATION IN IC FSTA EXP1 /STORE BACK AGAIN STARTD FLDA EXPFUD-1 /TEST EXPONENT FSUB EXP1-1,0 /DID IT CHANGE ? (XR 2 = 0) STARTF JNE EXPER /YES, OVERFLOW JXN EXPP,0 /NO INVERSION NECESSARY. RETURN. FLDA F1EXP /INVERT IT FDIV EXP1 JA EXPRTN EXPP, FLDA EXP1 /AN EXIT. JA EXPRTN