A large commit.
[pdp8.git] / sw / os8 / v3d / sources / fortran / all / dexp.ra
CommitLineData
81e70d48
PH
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/
35DEXPXR, SETX XRDEXP
36 SETB BPDEXP
37/
38/BEGINNING OF BASE PAGE
39/
40BPDEXP, F 0.0
41XRDEXP, F 0.0
42X, F 0.0
43 F 0.0
44/
45 ORG 10*3+BPDEXP
46 FNOP
47 JA DEXPXR
48 0
49DEXRTN, JA .
50/
51TOPLIM, 3377
52 3377
53 3777
54 7777
55 7777
56 7777
57M, F 0.0
58 F 0.0
59N, F 0.0
60 F 0.0
61R, F 0.0
62 F 0.0
63LOG2E, 0001 /1.4426950408889634
64 2705
65 2435
66 4512
67 7013
68 7603
69DFP125, 7775 /.125
70 3777
71 7777
72 7777
73 7777
74 7776
75DEXFP1, F 1.0
76 F 0.0
77/
78DFR1S8, 0001 /2^1/8
79 2134
80 5340
81 7437
82 2505
83 7302
84DFP2S8, 0001 /2^2/8
85 2301
86 5770
87 1214
88 3334
89 2524
90DFP3S8, 0001 /2^3/8
91 2457
92 7553
93 2515
94 4250
95 4720
96DFP4S8, 0001 /2^4/8
97 2650
98 1171
99 4637
100 6357
101 1425
102DFP5S8, 0001 /2^5/8
103 3053
104 1625
105 0212
106 5174
107 3070
108DFP6S8, 0001 /2^6/8
109 3272
110 1176
111 3126
112 5516
113 5532
114DFP7S8, 0001 /2^7/8
115 3526
116 0143
117 3476
118 7222
119 0722
120/
121/
122DEXA4, 0006 /60.593191717336463
123 3622
124 7666
125 6462
126 2157
127 5534
128DEXB4, 0007 /87.417497202235527
129 2566
130 5341
131 0613
132 6705
133 7214
134DEXC4, 0005 /30.296595858668232
135 3622
136 7666
137 6462
138 2157
139 5546
140DEXD4, 0001 /1.0500
141 2063
142 1463
143 1463
144 1463
145 1462
146DEXH4, 0010 /214.17286814547704
147 3261
148 3040
149 4261
150 5654
151 0240
152DTEMP1, F 0.0
153 F 0.0
154DFP2, 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
176DEX1, JNE DEX2 /X=0
177 FLDA DEXFP1 /E^0=1
178 JA DEXRTN
179DEX2, FSTA X
180 JA DEX4
181DEX3, FCLA
182 JA DEXRTN /RETURN 0 FOR TOO SMALL
183/
184/SET UP M+N+R=X*LOG2(E)
185DEX4, 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
201DEX50, LDX 0,1
202 FLDA N
203 FSTA R /IF < .125 ALREADY
204DEX5, 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
211DEX6, 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/
222DEX7, 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/
244DEX20, FLDA M
245 JNE DEX21
246 FLDA DEXFP1
247 FSTA M
248 JA DEX30
249DEX21, FNEG
250 ATX 1
251 FLDA DEXFP1
252 FSTA M
253 FLDA DFP2
254DEX22, FMULM M /M*2
255 JXN DEX22,1+
256/CALCULATE M*N*R
257DEX30, FLDA M
258 FMUL N
259 FMUL R
260 FSTA X
261 JXN DEX31,0 /WAS X MINUS
262 JA DEXRTN
263DEX31, FLDA DEXFP1 /.1/X IF -X
264 FDIV X
265 JA DEXRTN
266\f\1e