1 | /* Accurate tables for exp2f(). |
2 | Copyright (C) 1998-2017 Free Software Foundation, Inc. |
3 | This file is part of the GNU C Library. |
4 | Contributed by Geoffrey Keating <geoffk@ozemail.com.au> |
5 | |
6 | The GNU C Library is free software; you can redistribute it and/or |
7 | modify it under the terms of the GNU Lesser General Public |
8 | License as published by the Free Software Foundation; either |
9 | version 2.1 of the License, or (at your option) any later version. |
10 | |
11 | The GNU C Library is distributed in the hope that it will be useful, |
12 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
14 | Lesser General Public License for more details. |
15 | |
16 | You should have received a copy of the GNU Lesser General Public |
17 | License along with the GNU C Library; if not, see |
18 | <http://www.gnu.org/licenses/>. */ |
19 | |
20 | /* This table has the property that, for all integers -128 <= i <= 127, |
21 | exp(i/256.0 + __exp2f_deltatable[i-128]) == __exp2f_atable[i+128] + r |
22 | for some -2^-35 < r < 2^-35 (abs(r) < 2^-36 if i <= 0); and that |
23 | __exp2f_deltatable[i+128] == t * 2^-30 |
24 | for integer t so that abs(t) <= 43447 * 2^0. */ |
25 | |
26 | #define W30 (9.31322575e-10) |
27 | static const float __exp2f_deltatable[256] = { |
28 | -810*W30, 283*W30, -1514*W30, 1304*W30, |
29 | -1148*W30, -98*W30, -744*W30, -156*W30, |
30 | -419*W30, -155*W30, 474*W30, 167*W30, |
31 | -1984*W30, -826*W30, 692*W30, 781*W30, |
32 | -578*W30, -411*W30, -129*W30, -1500*W30, |
33 | 654*W30, -141*W30, -816*W30, -53*W30, |
34 | 148*W30, 493*W30, -2214*W30, 760*W30, |
35 | 260*W30, 750*W30, -1300*W30, 1424*W30, |
36 | -1445*W30, -339*W30, -680*W30, -349*W30, |
37 | -922*W30, 531*W30, 193*W30, -2892*W30, |
38 | 290*W30, -2145*W30, -276*W30, 485*W30, |
39 | -695*W30, 215*W30, -7093*W30, 412*W30, |
40 | -4596*W30, 367*W30, 592*W30, -615*W30, |
41 | -97*W30, -1066*W30, 972*W30, -226*W30, |
42 | -625*W30, -374*W30, -5647*W30, -180*W30, |
43 | 20349*W30, -447*W30, 111*W30, -4164*W30, |
44 | -87*W30, -21*W30, -251*W30, 66*W30, |
45 | -517*W30, 2093*W30, -263*W30, 182*W30, |
46 | -601*W30, 475*W30, -483*W30, -1251*W30, |
47 | -373*W30, 1471*W30, -92*W30, -215*W30, |
48 | -97*W30, -190*W30, 0*W30, -290*W30, |
49 | -2647*W30, 1940*W30, -582*W30, 28*W30, |
50 | 833*W30, 1493*W30, 34*W30, 321*W30, |
51 | 3327*W30, -35*W30, 177*W30, -135*W30, |
52 | -796*W30, -428*W30, 129*W30, 9332*W30, |
53 | -12*W30, -69*W30, -1743*W30, 6508*W30, |
54 | -60*W30, 359*W30, 43447*W30, 15*W30, |
55 | -23*W30, -305*W30, -375*W30, -652*W30, |
56 | 667*W30, 269*W30, -1575*W30, 185*W30, |
57 | -329*W30, 200*W30, 6002*W30, 163*W30, |
58 | -647*W30, 19*W30, -603*W30, -755*W30, |
59 | 742*W30, -438*W30, 3587*W30, 2560*W30, |
60 | 0*W30, -520*W30, -241*W30, -299*W30, |
61 | -1270*W30, -991*W30, -1138*W30, 255*W30, |
62 | -1192*W30, 1722*W30, 1023*W30, 3700*W30, |
63 | -1388*W30, -1551*W30, -2549*W30, 27*W30, |
64 | 282*W30, 673*W30, 113*W30, 1561*W30, |
65 | 72*W30, 873*W30, 87*W30, -395*W30, |
66 | -433*W30, 629*W30, 3440*W30, -284*W30, |
67 | -592*W30, -103*W30, -46*W30, -3844*W30, |
68 | 1712*W30, 303*W30, 1555*W30, -631*W30, |
69 | -1400*W30, -961*W30, -854*W30, -276*W30, |
70 | 407*W30, 833*W30, -345*W30, -1501*W30, |
71 | 121*W30, -1581*W30, 400*W30, 150*W30, |
72 | 1224*W30, -139*W30, -563*W30, 879*W30, |
73 | 933*W30, 2939*W30, 788*W30, 211*W30, |
74 | 530*W30, -192*W30, 706*W30, -13347*W30, |
75 | 1065*W30, 3*W30, 111*W30, -208*W30, |
76 | -360*W30, -532*W30, -291*W30, 483*W30, |
77 | 987*W30, -33*W30, -1373*W30, -166*W30, |
78 | -1174*W30, -3955*W30, 1601*W30, -280*W30, |
79 | 1405*W30, 600*W30, -1659*W30, -23*W30, |
80 | 390*W30, 449*W30, 570*W30, -13143*W30, |
81 | -9*W30, -1646*W30, 1201*W30, 294*W30, |
82 | 2181*W30, -1173*W30, 1388*W30, -4504*W30, |
83 | 190*W30, -2304*W30, 211*W30, 239*W30, |
84 | 48*W30, -817*W30, 1018*W30, 1828*W30, |
85 | -663*W30, 1408*W30, 408*W30, -36*W30, |
86 | 1295*W30, -230*W30, 1341*W30, 9*W30, |
87 | 40*W30, 705*W30, 186*W30, 376*W30, |
88 | 557*W30, 5866*W30, 363*W30, -1558*W30, |
89 | 718*W30, 669*W30, 1369*W30, -2972*W30, |
90 | -468*W30, -121*W30, -219*W30, 667*W30, |
91 | 29954*W30, 366*W30, 48*W30, -203*W30 |
92 | }; |
93 | |
94 | static const float __exp2f_atable[256] /* __attribute__((mode(SF))) */ = { |
95 | 0.707106411447, /* 0x0.b504ecfff */ |
96 | 0.709024071690, /* 0x0.b58299fff */ |
97 | 0.710945606239, /* 0x0.b60088000 */ |
98 | 0.712874472142, /* 0x0.b67ef1000 */ |
99 | 0.714806139464, /* 0x0.b6fd88fff */ |
100 | 0.716744661340, /* 0x0.b77c94000 */ |
101 | 0.718687653549, /* 0x0.b7fbea000 */ |
102 | 0.720636486992, /* 0x0.b87ba1fff */ |
103 | 0.722590208040, /* 0x0.b8fbabfff */ |
104 | 0.724549472323, /* 0x0.b97c12fff */ |
105 | 0.726514220228, /* 0x0.b9fcd5fff */ |
106 | 0.728483855735, /* 0x0.ba7deb000 */ |
107 | 0.730457961549, /* 0x0.baff4afff */ |
108 | 0.732438981522, /* 0x0.bb811efff */ |
109 | 0.734425544748, /* 0x0.bc0350000 */ |
110 | 0.736416816713, /* 0x0.bc85d0000 */ |
111 | 0.738412797450, /* 0x0.bd089efff */ |
112 | 0.740414917465, /* 0x0.bd8bd4fff */ |
113 | 0.742422521111, /* 0x0.be0f66fff */ |
114 | 0.744434773914, /* 0x0.be9346fff */ |
115 | 0.746454179287, /* 0x0.bf179f000 */ |
116 | 0.748477637755, /* 0x0.bf9c3afff */ |
117 | 0.750506639473, /* 0x0.c02133fff */ |
118 | 0.752541840064, /* 0x0.c0a694fff */ |
119 | 0.754582285889, /* 0x0.c12c4e000 */ |
120 | 0.756628334525, /* 0x0.c1b265000 */ |
121 | 0.758678436269, /* 0x0.c238bffff */ |
122 | 0.760736882681, /* 0x0.c2bfa6fff */ |
123 | 0.762799203401, /* 0x0.c346cf000 */ |
124 | 0.764867603790, /* 0x0.c3ce5d000 */ |
125 | 0.766940355298, /* 0x0.c45633fff */ |
126 | 0.769021093841, /* 0x0.c4de90fff */ |
127 | 0.771104693409, /* 0x0.c5671dfff */ |
128 | 0.773195922364, /* 0x0.c5f02afff */ |
129 | 0.775292098512, /* 0x0.c6798afff */ |
130 | 0.777394294745, /* 0x0.c70350000 */ |
131 | 0.779501736166, /* 0x0.c78d6d000 */ |
132 | 0.781615912910, /* 0x0.c817fafff */ |
133 | 0.783734917628, /* 0x0.c8a2d9fff */ |
134 | 0.785858273516, /* 0x0.c92e02000 */ |
135 | 0.787990570071, /* 0x0.c9b9c0000 */ |
136 | 0.790125787245, /* 0x0.ca45aefff */ |
137 | 0.792268991467, /* 0x0.cad223fff */ |
138 | 0.794417440881, /* 0x0.cb5ef0fff */ |
139 | 0.796570718287, /* 0x0.cbec0efff */ |
140 | 0.798730909811, /* 0x0.cc79a0fff */ |
141 | 0.800892710672, /* 0x0.cd074dfff */ |
142 | 0.803068041795, /* 0x0.cd95ddfff */ |
143 | 0.805242776881, /* 0x0.ce2464000 */ |
144 | 0.807428598393, /* 0x0.ceb3a3fff */ |
145 | 0.809617877002, /* 0x0.cf431dfff */ |
146 | 0.811812341211, /* 0x0.cfd2eefff */ |
147 | 0.814013659956, /* 0x0.d06333000 */ |
148 | 0.816220164311, /* 0x0.d0f3ce000 */ |
149 | 0.818434238424, /* 0x0.d184e7fff */ |
150 | 0.820652604094, /* 0x0.d21649fff */ |
151 | 0.822877407074, /* 0x0.d2a818000 */ |
152 | 0.825108587751, /* 0x0.d33a51000 */ |
153 | 0.827342867839, /* 0x0.d3ccbdfff */ |
154 | 0.829588949684, /* 0x0.d45ff1000 */ |
155 | 0.831849217401, /* 0x0.d4f411fff */ |
156 | 0.834093391880, /* 0x0.d58724fff */ |
157 | 0.836355149750, /* 0x0.d61b5f000 */ |
158 | 0.838620424257, /* 0x0.d6afd3fff */ |
159 | 0.840896368027, /* 0x0.d744fc000 */ |
160 | 0.843176305293, /* 0x0.d7da66fff */ |
161 | 0.845462262643, /* 0x0.d87037000 */ |
162 | 0.847754716864, /* 0x0.d90673fff */ |
163 | 0.850052893157, /* 0x0.d99d10fff */ |
164 | 0.852359056469, /* 0x0.da3433fff */ |
165 | 0.854668736446, /* 0x0.dacb91fff */ |
166 | 0.856986224651, /* 0x0.db6373000 */ |
167 | 0.859309315673, /* 0x0.dbfbb1fff */ |
168 | 0.861639738080, /* 0x0.dc946bfff */ |
169 | 0.863975346095, /* 0x0.dd2d7d000 */ |
170 | 0.866317391394, /* 0x0.ddc6f9fff */ |
171 | 0.868666708472, /* 0x0.de60f1000 */ |
172 | 0.871022939695, /* 0x0.defb5c000 */ |
173 | 0.873383641229, /* 0x0.df9611fff */ |
174 | 0.875751554968, /* 0x0.e03141000 */ |
175 | 0.878126025200, /* 0x0.e0ccde000 */ |
176 | 0.880506813521, /* 0x0.e168e4fff */ |
177 | 0.882894217966, /* 0x0.e2055afff */ |
178 | 0.885287821299, /* 0x0.e2a239000 */ |
179 | 0.887686729423, /* 0x0.e33f6ffff */ |
180 | 0.890096127973, /* 0x0.e3dd56fff */ |
181 | 0.892507970338, /* 0x0.e47b67000 */ |
182 | 0.894928157336, /* 0x0.e51a03000 */ |
183 | 0.897355020043, /* 0x0.e5b90efff */ |
184 | 0.899788379682, /* 0x0.e65888000 */ |
185 | 0.902227103705, /* 0x0.e6f85afff */ |
186 | 0.904673457151, /* 0x0.e798ae000 */ |
187 | 0.907128036008, /* 0x0.e8398afff */ |
188 | 0.909585535528, /* 0x0.e8da99000 */ |
189 | 0.912051796915, /* 0x0.e97c3a000 */ |
190 | 0.914524436003, /* 0x0.ea1e46000 */ |
191 | 0.917003571999, /* 0x0.eac0bf000 */ |
192 | 0.919490039339, /* 0x0.eb63b2fff */ |
193 | 0.921983361257, /* 0x0.ec071a000 */ |
194 | 0.924488604054, /* 0x0.ecab48fff */ |
195 | 0.926989555360, /* 0x0.ed4f30000 */ |
196 | 0.929502844812, /* 0x0.edf3e6000 */ |
197 | 0.932021975503, /* 0x0.ee98fdfff */ |
198 | 0.934553921208, /* 0x0.ef3eecfff */ |
199 | 0.937083780759, /* 0x0.efe4b8fff */ |
200 | 0.939624726786, /* 0x0.f08b3f000 */ |
201 | 0.942198514924, /* 0x0.f133ebfff */ |
202 | 0.944726586343, /* 0x0.f1d99a000 */ |
203 | 0.947287976728, /* 0x0.f28176fff */ |
204 | 0.949856162070, /* 0x0.f329c5fff */ |
205 | 0.952431440345, /* 0x0.f3d28bfff */ |
206 | 0.955013573175, /* 0x0.f47bc5000 */ |
207 | 0.957603693021, /* 0x0.f52584000 */ |
208 | 0.960199773321, /* 0x0.f5cfa7000 */ |
209 | 0.962801992906, /* 0x0.f67a31000 */ |
210 | 0.965413510788, /* 0x0.f72556fff */ |
211 | 0.968030691152, /* 0x0.f7d0dc000 */ |
212 | 0.970655620084, /* 0x0.f87ce2fff */ |
213 | 0.973290979849, /* 0x0.f92998fff */ |
214 | 0.975926160805, /* 0x0.f9d64bfff */ |
215 | 0.978571653370, /* 0x0.fa83ac000 */ |
216 | 0.981225252139, /* 0x0.fb3193fff */ |
217 | 0.983885228626, /* 0x0.fbdfe6fff */ |
218 | 0.986552715296, /* 0x0.fc8eb7fff */ |
219 | 0.989228487027, /* 0x0.fd3e14000 */ |
220 | 0.991909801964, /* 0x0.fdedcd000 */ |
221 | 0.994601726545, /* 0x0.fe9e38000 */ |
222 | 0.997297704209, /* 0x0.ff4ee6fff */ |
223 | 1.000000000000, /* 0x1.000000000 */ |
224 | 1.002710938457, /* 0x1.00b1aa000 */ |
225 | 1.005429744692, /* 0x1.0163d7ffe */ |
226 | 1.008155703526, /* 0x1.02167dffe */ |
227 | 1.010888457284, /* 0x1.02c995fff */ |
228 | 1.013629436498, /* 0x1.037d38000 */ |
229 | 1.016377568250, /* 0x1.043152000 */ |
230 | 1.019134163841, /* 0x1.04e5f9ffe */ |
231 | 1.021896362316, /* 0x1.059b00000 */ |
232 | 1.024668931945, /* 0x1.0650b3ffe */ |
233 | 1.027446627635, /* 0x1.0706be001 */ |
234 | 1.030234098408, /* 0x1.07bd6bffe */ |
235 | 1.033023953416, /* 0x1.087441ffe */ |
236 | 1.035824656494, /* 0x1.092bce000 */ |
237 | 1.038632392900, /* 0x1.09e3d0001 */ |
238 | 1.041450142840, /* 0x1.0a9c79ffe */ |
239 | 1.044273972530, /* 0x1.0b558a001 */ |
240 | 1.047105550795, /* 0x1.0c0f1c001 */ |
241 | 1.049944162390, /* 0x1.0cc924001 */ |
242 | 1.052791833895, /* 0x1.0d83c4001 */ |
243 | 1.055645227426, /* 0x1.0e3ec3fff */ |
244 | 1.058507919326, /* 0x1.0efa60001 */ |
245 | 1.061377286898, /* 0x1.0fb66bfff */ |
246 | 1.064254641510, /* 0x1.1072fdffe */ |
247 | 1.067140102389, /* 0x1.113018000 */ |
248 | 1.070034146304, /* 0x1.11edc1fff */ |
249 | 1.072937250162, /* 0x1.12ac04001 */ |
250 | 1.075843691823, /* 0x1.136a7dfff */ |
251 | 1.078760385496, /* 0x1.1429a3ffe */ |
252 | 1.081685543070, /* 0x1.14e958000 */ |
253 | 1.084618330005, /* 0x1.15a98c000 */ |
254 | 1.087556362176, /* 0x1.166a18001 */ |
255 | 1.090508937863, /* 0x1.172b98001 */ |
256 | 1.093464612954, /* 0x1.17ed4bfff */ |
257 | 1.096430182434, /* 0x1.18afa5ffe */ |
258 | 1.099401354802, /* 0x1.19725e000 */ |
259 | 1.102381587017, /* 0x1.1a35adfff */ |
260 | 1.105370759965, /* 0x1.1af994000 */ |
261 | 1.108367800686, /* 0x1.1bbdfdffe */ |
262 | 1.111373305331, /* 0x1.1c82f6000 */ |
263 | 1.114387035385, /* 0x1.1d4878001 */ |
264 | 1.117408752440, /* 0x1.1e0e7ffff */ |
265 | 1.120437502874, /* 0x1.1ed4fe000 */ |
266 | 1.123474478729, /* 0x1.1f9c06000 */ |
267 | 1.126521706601, /* 0x1.2063ba001 */ |
268 | 1.129574775716, /* 0x1.212bd0001 */ |
269 | 1.132638812065, /* 0x1.21f49e000 */ |
270 | 1.135709524130, /* 0x1.22bddbffe */ |
271 | 1.138789534565, /* 0x1.2387b5fff */ |
272 | 1.141876101508, /* 0x1.2451fe000 */ |
273 | 1.144971728301, /* 0x1.251cddffe */ |
274 | 1.148077130296, /* 0x1.25e861ffe */ |
275 | 1.151189923305, /* 0x1.26b462001 */ |
276 | 1.154312610610, /* 0x1.278107ffe */ |
277 | 1.157440662410, /* 0x1.284e08001 */ |
278 | 1.160578370109, /* 0x1.291baa001 */ |
279 | 1.163725256932, /* 0x1.29e9e6000 */ |
280 | 1.166879892324, /* 0x1.2ab8a3ffe */ |
281 | 1.170044302935, /* 0x1.2b8805fff */ |
282 | 1.173205971694, /* 0x1.2c5739ffe */ |
283 | 1.176397800428, /* 0x1.2d2867ffe */ |
284 | 1.179586529747, /* 0x1.2df962001 */ |
285 | 1.182784795737, /* 0x1.2ecafbffe */ |
286 | 1.185991406414, /* 0x1.2f9d21ffe */ |
287 | 1.189206838636, /* 0x1.306fdc001 */ |
288 | 1.192430973067, /* 0x1.314328000 */ |
289 | 1.195664167430, /* 0x1.32170c001 */ |
290 | 1.198906540890, /* 0x1.32eb8a001 */ |
291 | 1.202157497408, /* 0x1.33c098000 */ |
292 | 1.205416083326, /* 0x1.349625fff */ |
293 | 1.208683252332, /* 0x1.356c43fff */ |
294 | 1.211961269402, /* 0x1.364318001 */ |
295 | 1.215246438983, /* 0x1.371a64000 */ |
296 | 1.218539118740, /* 0x1.37f22dffe */ |
297 | 1.221847295770, /* 0x1.38cafc000 */ |
298 | 1.225158572187, /* 0x1.39a3fdfff */ |
299 | 1.228481650325, /* 0x1.3a7dc5ffe */ |
300 | 1.231811761846, /* 0x1.3b5803fff */ |
301 | 1.235149741144, /* 0x1.3c32c5ffe */ |
302 | 1.238499879811, /* 0x1.3d0e53ffe */ |
303 | 1.241858124726, /* 0x1.3dea69fff */ |
304 | 1.245225191102, /* 0x1.3ec713fff */ |
305 | 1.248601436624, /* 0x1.3fa458000 */ |
306 | 1.251975655584, /* 0x1.40817a001 */ |
307 | 1.255380749731, /* 0x1.4160a2001 */ |
308 | 1.258783102010, /* 0x1.423f9bffe */ |
309 | 1.262198328973, /* 0x1.431f6e000 */ |
310 | 1.265619754780, /* 0x1.43ffa7fff */ |
311 | 1.269052743928, /* 0x1.44e0a4001 */ |
312 | 1.272490739830, /* 0x1.45c1f4000 */ |
313 | 1.275942921659, /* 0x1.46a432001 */ |
314 | 1.279397487615, /* 0x1.478697ffe */ |
315 | 1.282870173427, /* 0x1.486a2dffe */ |
316 | 1.286346316319, /* 0x1.494dfdffe */ |
317 | 1.289836049094, /* 0x1.4a32b2001 */ |
318 | 1.293333172770, /* 0x1.4b17e1ffe */ |
319 | 1.296839594835, /* 0x1.4bfdadfff */ |
320 | 1.300354957560, /* 0x1.4ce40fffe */ |
321 | 1.303882122055, /* 0x1.4dcb38001 */ |
322 | 1.307417988757, /* 0x1.4eb2f1ffe */ |
323 | 1.310960650439, /* 0x1.4f9b1dfff */ |
324 | 1.314516782746, /* 0x1.50842bfff */ |
325 | 1.318079948424, /* 0x1.516daffff */ |
326 | 1.321653246888, /* 0x1.5257de000 */ |
327 | 1.325237751030, /* 0x1.5342c8001 */ |
328 | 1.328829526907, /* 0x1.542e2c000 */ |
329 | 1.332433700535, /* 0x1.551a5fffe */ |
330 | 1.336045145966, /* 0x1.56070dffe */ |
331 | 1.339667558645, /* 0x1.56f473ffe */ |
332 | 1.343300342533, /* 0x1.57e287ffe */ |
333 | 1.346941947961, /* 0x1.58d130001 */ |
334 | 1.350594043714, /* 0x1.59c087ffe */ |
335 | 1.354256033883, /* 0x1.5ab085fff */ |
336 | 1.357932448365, /* 0x1.5ba175ffe */ |
337 | 1.361609339707, /* 0x1.5c926dfff */ |
338 | 1.365299344044, /* 0x1.5d8441ffe */ |
339 | 1.369003057507, /* 0x1.5e76fc001 */ |
340 | 1.372714757920, /* 0x1.5f6a3c000 */ |
341 | 1.376437187179, /* 0x1.605e2fffe */ |
342 | 1.380165219333, /* 0x1.615282001 */ |
343 | 1.383909463864, /* 0x1.6247e3ffe */ |
344 | 1.387661933907, /* 0x1.633dd0000 */ |
345 | 1.391424179060, /* 0x1.64345fffe */ |
346 | 1.395197510706, /* 0x1.652ba9fff */ |
347 | 1.399006724329, /* 0x1.66254dffe */ |
348 | 1.402773022651, /* 0x1.671c22000 */ |
349 | 1.406576037403, /* 0x1.68155dfff */ |
350 | 1.410389423392, /* 0x1.690f48001 */ |
351 | }; |
352 | |