2008-01-10 Vladimir Makarov <vmakarov@redhat.com>
[official-gcc.git] / libgcc / config / libbid / decimal_data.c
blob4f74d010e38f84f47409b62506b30da38acce24f
1 /* Copyright (C) 2007 Free Software Foundation, Inc.
3 This file is part of GCC.
5 GCC is free software; you can redistribute it and/or modify it under
6 the terms of the GNU General Public License as published by the Free
7 Software Foundation; either version 2, or (at your option) any later
8 version.
10 In addition to the permissions in the GNU General Public License, the
11 Free Software Foundation gives you unlimited permission to link the
12 compiled version of this file into combinations with other programs,
13 and to distribute those combinations without any restriction coming
14 from the use of this file. (The General Public License restrictions
15 do apply in other respects; for example, they cover modification of
16 the file, and distribution when not linked into a combine
17 executable.)
19 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
20 WARRANTY; without even the implied warranty of MERCHANTABILITY or
21 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
22 for more details.
24 You should have received a copy of the GNU General Public License
25 along with GCC; see the file COPYING. If not, write to the Free
26 Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
27 02110-1301, USA. */
29 #include "bid_internal.h"
31 UINT64 __bid_round_const_table[][19] = {
32 { // RN
33 0ull, // 0 extra digits
34 5ull, // 1 extra digits
35 50ull, // 2 extra digits
36 500ull, // 3 extra digits
37 5000ull, // 4 extra digits
38 50000ull, // 5 extra digits
39 500000ull, // 6 extra digits
40 5000000ull, // 7 extra digits
41 50000000ull, // 8 extra digits
42 500000000ull, // 9 extra digits
43 5000000000ull, // 10 extra digits
44 50000000000ull, // 11 extra digits
45 500000000000ull, // 12 extra digits
46 5000000000000ull, // 13 extra digits
47 50000000000000ull, // 14 extra digits
48 500000000000000ull, // 15 extra digits
49 5000000000000000ull, // 16 extra digits
50 50000000000000000ull, // 17 extra digits
51 500000000000000000ull // 18 extra digits
54 { // RD
55 0ull, // 0 extra digits
56 0ull, // 1 extra digits
57 0ull, // 2 extra digits
58 00ull, // 3 extra digits
59 000ull, // 4 extra digits
60 0000ull, // 5 extra digits
61 00000ull, // 6 extra digits
62 000000ull, // 7 extra digits
63 0000000ull, // 8 extra digits
64 00000000ull, // 9 extra digits
65 000000000ull, // 10 extra digits
66 0000000000ull, // 11 extra digits
67 00000000000ull, // 12 extra digits
68 000000000000ull, // 13 extra digits
69 0000000000000ull, // 14 extra digits
70 00000000000000ull, // 15 extra digits
71 000000000000000ull, // 16 extra digits
72 0000000000000000ull, // 17 extra digits
73 00000000000000000ull // 18 extra digits
76 { // round to Inf
77 0ull, // 0 extra digits
78 9ull, // 1 extra digits
79 99ull, // 2 extra digits
80 999ull, // 3 extra digits
81 9999ull, // 4 extra digits
82 99999ull, // 5 extra digits
83 999999ull, // 6 extra digits
84 9999999ull, // 7 extra digits
85 99999999ull, // 8 extra digits
86 999999999ull, // 9 extra digits
87 9999999999ull, // 10 extra digits
88 99999999999ull, // 11 extra digits
89 999999999999ull, // 12 extra digits
90 9999999999999ull, // 13 extra digits
91 99999999999999ull, // 14 extra digits
92 999999999999999ull, // 15 extra digits
93 9999999999999999ull, // 16 extra digits
94 99999999999999999ull, // 17 extra digits
95 999999999999999999ull // 18 extra digits
98 { // RZ
99 0ull, // 0 extra digits
100 0ull, // 1 extra digits
101 0ull, // 2 extra digits
102 00ull, // 3 extra digits
103 000ull, // 4 extra digits
104 0000ull, // 5 extra digits
105 00000ull, // 6 extra digits
106 000000ull, // 7 extra digits
107 0000000ull, // 8 extra digits
108 00000000ull, // 9 extra digits
109 000000000ull, // 10 extra digits
110 0000000000ull, // 11 extra digits
111 00000000000ull, // 12 extra digits
112 000000000000ull, // 13 extra digits
113 0000000000000ull, // 14 extra digits
114 00000000000000ull, // 15 extra digits
115 000000000000000ull, // 16 extra digits
116 0000000000000000ull, // 17 extra digits
117 00000000000000000ull // 18 extra digits
120 { // round ties away from 0
121 0ull, // 0 extra digits
122 5ull, // 1 extra digits
123 50ull, // 2 extra digits
124 500ull, // 3 extra digits
125 5000ull, // 4 extra digits
126 50000ull, // 5 extra digits
127 500000ull, // 6 extra digits
128 5000000ull, // 7 extra digits
129 50000000ull, // 8 extra digits
130 500000000ull, // 9 extra digits
131 5000000000ull, // 10 extra digits
132 50000000000ull, // 11 extra digits
133 500000000000ull, // 12 extra digits
134 5000000000000ull, // 13 extra digits
135 50000000000000ull, // 14 extra digits
136 500000000000000ull, // 15 extra digits
137 5000000000000000ull, // 16 extra digits
138 50000000000000000ull, // 17 extra digits
139 500000000000000000ull // 18 extra digits
144 UINT128 __bid_round_const_table_128[][36] = {
145 { //RN
146 {{0ull, 0ull}}
147 , // 0 extra digits
148 {{5ull, 0ull}}
149 , // 1 extra digits
150 {{50ull, 0ull}}
151 , // 2 extra digits
152 {{500ull, 0ull}}
153 , // 3 extra digits
154 {{5000ull, 0ull}}
155 , // 4 extra digits
156 {{50000ull, 0ull}}
157 , // 5 extra digits
158 {{500000ull, 0ull}}
159 , // 6 extra digits
160 {{5000000ull, 0ull}}
161 , // 7 extra digits
162 {{50000000ull, 0ull}}
163 , // 8 extra digits
164 {{500000000ull, 0ull}}
165 , // 9 extra digits
166 {{5000000000ull, 0ull}}
167 , // 10 extra digits
168 {{50000000000ull, 0ull}}
169 , // 11 extra digits
170 {{500000000000ull, 0ull}}
171 , // 12 extra digits
172 {{5000000000000ull, 0ull}}
173 , // 13 extra digits
174 {{50000000000000ull, 0ull}}
175 , // 14 extra digits
176 {{500000000000000ull, 0ull}}
177 , // 15 extra digits
178 {{5000000000000000ull, 0ull}}
179 , // 16 extra digits
180 {{50000000000000000ull, 0ull}}
181 , // 17 extra digits
182 {{500000000000000000ull, 0ull}}
183 , // 18 extra digits
184 {{5000000000000000000ull, 0ull}}
185 , // 19 extra digits
186 {{0xb5e3af16b1880000ull, 2ull}}
187 , //20
188 {{0x1ae4d6e2ef500000ull, 27ull}}
189 , //21
190 {{0xcf064dd59200000ull, 271ull}}
191 , //22
192 {{0x8163f0a57b400000ull, 2710ull}}
193 , //23
194 {{0xde76676d0800000ull, 27105ull}}
195 , //24
196 {{0x8b0a00a425000000ull, 0x422caull}}
197 , //25
198 {{0x6e64066972000000ull, 0x295be9ull}}
199 , //26
200 {{0x4fe8401e74000000ull, 0x19d971eull}}
201 , //27
202 {{0x1f12813088000000ull, 0x1027e72full}}
203 , //28
204 {{0x36b90be550000000ull, 0xa18f07d7ull}}
205 , //29
206 {{0x233a76f520000000ull, 0x64f964e68ull}}
207 , //30
208 {{0x6048a59340000000ull, 0x3f1bdf1011ull}}
209 , //31
210 {{0xc2d677c080000000ull, 0x27716b6a0adull}}
211 , //32
212 {{0x9c60ad8500000000ull, 0x18a6e32246c9ull}}
213 , //33
214 {{0x1bc6c73200000000ull, 0xf684df56c3e0ull}}
215 , //34
216 {{0x15c3c7f400000000ull, 0x9a130b963a6c1ull}}
217 , //35
220 { //RD
221 {{0ull, 0ull}}
222 , // 0 extra digits
223 {{0ull, 0ull}}
224 , // 1 extra digits
225 {{0ull, 0ull}}
226 , // 2 extra digits
227 {{00ull, 0ull}}
228 , // 3 extra digits
229 {{000ull, 0ull}}
230 , // 4 extra digits
231 {{0000ull, 0ull}}
232 , // 5 extra digits
233 {{00000ull, 0ull}}
234 , // 6 extra digits
235 {{000000ull, 0ull}}
236 , // 7 extra digits
237 {{0000000ull, 0ull}}
238 , // 8 extra digits
239 {{00000000ull, 0ull}}
240 , // 9 extra digits
241 {{000000000ull, 0ull}}
242 , // 10 extra digits
243 {{0000000000ull, 0ull}}
244 , // 11 extra digits
245 {{00000000000ull, 0ull}}
246 , // 12 extra digits
247 {{000000000000ull, 0ull}}
248 , // 13 extra digits
249 {{0000000000000ull, 0ull}}
250 , // 14 extra digits
251 {{00000000000000ull, 0ull}}
252 , // 15 extra digits
253 {{000000000000000ull, 0ull}}
254 , // 16 extra digits
255 {{0000000000000000ull, 0ull}}
256 , // 17 extra digits
257 {{00000000000000000ull, 0ull}}
258 , // 18 extra digits
259 {{000000000000000000ull, 0ull}}
260 , // 19 extra digits
261 {{0ull, 0ull}}
262 , //20
263 {{0ull, 0ull}}
264 , //21
265 {{0ull, 0ull}}
266 , //22
267 {{0ull, 0ull}}
268 , //23
269 {{0ull, 0ull}}
270 , //24
271 {{0ull, 0ull}}
272 , //25
273 {{0ull, 0ull}}
274 , //26
275 {{0ull, 0ull}}
276 , //27
277 {{0ull, 0ull}}
278 , //28
279 {{0ull, 0ull}}
280 , //29
281 {{0ull, 0ull}}
282 , //30
283 {{0ull, 0ull}}
284 , //31
285 {{0ull, 0ull}}
286 , //32
287 {{0ull, 0ull}}
288 , //33
289 {{0ull, 0ull}}
290 , //34
291 {{0ull, 0ull}}
292 , //35
295 { //RU
296 {{0ull, 0ull}}
297 , // 0 extra digits
298 {{9ull, 0ull}}
299 , // 1 extra digits
300 {{99ull, 0ull}}
301 , // 2 extra digits
302 {{999ull, 0ull}}
303 , // 3 extra digits
304 {{9999ull, 0ull}}
305 , // 4 extra digits
306 {{99999ull, 0ull}}
307 , // 5 extra digits
308 {{999999ull, 0ull}}
309 , // 6 extra digits
310 {{9999999ull, 0ull}}
311 , // 7 extra digits
312 {{99999999ull, 0ull}}
313 , // 8 extra digits
314 {{999999999ull, 0ull}}
315 , // 9 extra digits
316 {{9999999999ull, 0ull}}
317 , // 10 extra digits
318 {{99999999999ull, 0ull}}
319 , // 11 extra digits
320 {{999999999999ull, 0ull}}
321 , // 12 extra digits
322 {{9999999999999ull, 0ull}}
323 , // 13 extra digits
324 {{99999999999999ull, 0ull}}
325 , // 14 extra digits
326 {{999999999999999ull, 0ull}}
327 , // 15 extra digits
328 {{9999999999999999ull, 0ull}}
329 , // 16 extra digits
330 {{99999999999999999ull, 0ull}}
331 , // 17 extra digits
332 {{999999999999999999ull, 0ull}}
333 , // 18 extra digits
334 {{9999999999999999999ull, 0ull}}
335 , // 19 extra digits
336 {{0x6BC75E2D630FFFFFull, 0x5ull}}
337 , //20
338 {{0x35C9ADC5DE9FFFFFull, 0x36ull}}
339 , //21
340 {{0x19E0C9BAB23FFFFFull, 0x21eull}}
341 , //22
342 {{0x2C7E14AF67FFFFFull, 0x152dull}}
343 , //23
344 {{0x1BCECCEDA0FFFFFFull, 0xd3c2ull}}
345 , //24
346 {{0x1614014849FFFFFFull, 0x84595ull}}
347 , //25
348 {{0xDCC80CD2E3FFFFFFull, 0x52b7d2ull}}
349 , //26
350 {{0x9FD0803CE7FFFFFFull, 0x33B2E3Cull}}
351 , //27
352 {{0x3E2502610FFFFFFFull, 0x204FCE5Eull}}
353 , //28
354 {{0x6D7217CA9FFFFFFFull, 0x1431E0FAEull}}
355 , //29
356 {{0x4674EDEA3FFFFFFFull, 0xC9F2C9CD0ull}}
357 , //30
358 {{0xC0914B267FFFFFFFull, 0x7E37BE2022ull}}
359 , //31
360 {{0x85ACEF80FFFFFFFFull, 0x4EE2D6D415Bull}}
361 , //32
362 {{0x38c15b09ffffffffull, 0x314dc6448d93ull}}
363 , //33
364 {{0x378d8e63ffffffffull, 0x1ed09bead87c0ull}}
365 , //34
366 {{0x2b878fe7ffffffffull, 0x13426172c74d82ull}}
367 , //35
370 { //RZ
371 {{0ull, 0ull}}
372 , // 0 extra digits
373 {{0ull, 0ull}}
374 , // 1 extra digits
375 {{0ull, 0ull}}
376 , // 2 extra digits
377 {{00ull, 0ull}}
378 , // 3 extra digits
379 {{000ull, 0ull}}
380 , // 4 extra digits
381 {{0000ull, 0ull}}
382 , // 5 extra digits
383 {{00000ull, 0ull}}
384 , // 6 extra digits
385 {{000000ull, 0ull}}
386 , // 7 extra digits
387 {{0000000ull, 0ull}}
388 , // 8 extra digits
389 {{00000000ull, 0ull}}
390 , // 9 extra digits
391 {{000000000ull, 0ull}}
392 , // 10 extra digits
393 {{0000000000ull, 0ull}}
394 , // 11 extra digits
395 {{00000000000ull, 0ull}}
396 , // 12 extra digits
397 {{000000000000ull, 0ull}}
398 , // 13 extra digits
399 {{0000000000000ull, 0ull}}
400 , // 14 extra digits
401 {{00000000000000ull, 0ull}}
402 , // 15 extra digits
403 {{000000000000000ull, 0ull}}
404 , // 16 extra digits
405 {{0000000000000000ull, 0ull}}
406 , // 17 extra digits
407 {{00000000000000000ull, 0ull}}
408 , // 18 extra digits
409 {{000000000000000000ull, 0ull}}
410 , // 19 extra digits
411 {{0ull, 0ull}}
412 , //20
413 {{0ull, 0ull}}
414 , //21
415 {{0ull, 0ull}}
416 , //22
417 {{0ull, 0ull}}
418 , //23
419 {{0ull, 0ull}}
420 , //24
421 {{0ull, 0ull}}
422 , //25
423 {{0ull, 0ull}}
424 , //26
425 {{0ull, 0ull}}
426 , //27
427 {{0ull, 0ull}}
428 , //28
429 {{0ull, 0ull}}
430 , //29
431 {{0ull, 0ull}}
432 , //30
433 {{0ull, 0ull}}
434 , //31
435 {{0ull, 0ull}}
436 , //32
437 {{0ull, 0ull}}
438 , //33
439 {{0ull, 0ull}}
440 , //34
441 {{0ull, 0ull}}
442 , //35
445 { //RN, ties away
446 {{0ull, 0ull}}
447 , // 0 extra digits
448 {{5ull, 0ull}}
449 , // 1 extra digits
450 {{50ull, 0ull}}
451 , // 2 extra digits
452 {{500ull, 0ull}}
453 , // 3 extra digits
454 {{5000ull, 0ull}}
455 , // 4 extra digits
456 {{50000ull, 0ull}}
457 , // 5 extra digits
458 {{500000ull, 0ull}}
459 , // 6 extra digits
460 {{5000000ull, 0ull}}
461 , // 7 extra digits
462 {{50000000ull, 0ull}}
463 , // 8 extra digits
464 {{500000000ull, 0ull}}
465 , // 9 extra digits
466 {{5000000000ull, 0ull}}
467 , // 10 extra digits
468 {{50000000000ull, 0ull}}
469 , // 11 extra digits
470 {{500000000000ull, 0ull}}
471 , // 12 extra digits
472 {{5000000000000ull, 0ull}}
473 , // 13 extra digits
474 {{50000000000000ull, 0ull}}
475 , // 14 extra digits
476 {{500000000000000ull, 0ull}}
477 , // 15 extra digits
478 {{5000000000000000ull, 0ull}}
479 , // 16 extra digits
480 {{50000000000000000ull, 0ull}}
481 , // 17 extra digits
482 {{500000000000000000ull, 0ull}}
483 , // 18 extra digits
484 {{5000000000000000000ull, 0ull}}
485 , // 19 extra digits
486 {{0xb5e3af16b1880000ull, 2ull}}
487 , //20
488 {{0x1ae4d6e2ef500000ull, 27ull}}
489 , //21
490 {{0xcf064dd59200000ull, 271ull}}
491 , //22
492 {{0x8163f0a57b400000ull, 2710ull}}
493 , //23
494 {{0xde76676d0800000ull, 27105ull}}
495 , //24
496 {{0x8b0a00a425000000ull, 0x422caull}}
497 , //25
498 {{0x6e64066972000000ull, 0x295be9ull}}
499 , //26
500 {{0x4fe8401e74000000ull, 0x19d971eull}}
501 , //27
502 {{0x1f12813088000000ull, 0x1027e72full}}
503 , //28
504 {{0x36b90be550000000ull, 0xa18f07d7ull}}
505 , //29
506 {{0x233a76f520000000ull, 0x64f964e68ull}}
507 , //30
508 {{0x6048a59340000000ull, 0x3f1bdf1011ull}}
509 , //31
510 {{0xc2d677c080000000ull, 0x27716b6a0adull}}
511 , //32
512 {{0x9c60ad8500000000ull, 0x18a6e32246c9ull}}
513 , //33
514 {{0x1bc6c73200000000ull, 0xf684df56c3e0ull}}
515 , //34
516 {{0x15c3c7f400000000ull, 0x9a130b963a6c1ull}}
517 , //35
522 UINT128 __bid_reciprocals10_128[] = {
523 {{0ull, 0ull}}
524 , // 0 extra digits
525 {{0x3333333333333334ull, 0x3333333333333333ull}}
526 , // 1 extra digit
527 {{0x51eb851eb851eb86ull, 0x051eb851eb851eb8ull}}
528 , // 2 extra digits
529 {{0x3b645a1cac083127ull, 0x0083126e978d4fdfull}}
530 , // 3 extra digits
531 {{0x4af4f0d844d013aaULL, 0x00346dc5d6388659ULL}}
532 , // 10^(-4) * 2^131
533 {{0x08c3f3e0370cdc88ULL, 0x0029f16b11c6d1e1ULL}}
534 , // 10^(-5) * 2^134
535 {{0x6d698fe69270b06dULL, 0x00218def416bdb1aULL}}
536 , // 10^(-6) * 2^137
537 {{0xaf0f4ca41d811a47ULL, 0x0035afe535795e90ULL}}
538 , // 10^(-7) * 2^141
539 {{0xbf3f70834acdaea0ULL, 0x002af31dc4611873ULL}}
540 , // 10^(-8) * 2^144
541 {{0x65cc5a02a23e254dULL, 0x00225c17d04dad29ULL}}
542 , // 10^(-9) * 2^147
543 {{0x6fad5cd10396a214ULL, 0x0036f9bfb3af7b75ULL}}
544 , // 10^(-10) * 2^151
545 {{0xbfbde3da69454e76ULL, 0x002bfaffc2f2c92aULL}}
546 , // 10^(-11) * 2^154
547 {{0x32fe4fe1edd10b92ULL, 0x00232f33025bd422ULL}}
548 , // 10^(-12) * 2^157
549 {{0x84ca19697c81ac1cULL, 0x00384b84d092ed03ULL}}
550 , // 10^(-13) * 2^161
551 {{0x03d4e1213067bce4ULL, 0x002d09370d425736ULL}}
552 , // 10^(-14) * 2^164
553 {{0x3643e74dc052fd83ULL, 0x0024075f3dceac2bULL}}
554 , // 10^(-15) * 2^167
555 {{0x56d30baf9a1e626bULL, 0x0039a5652fb11378ULL}}
556 , // 10^(-16) * 2^171
557 {{0x12426fbfae7eb522ULL, 0x002e1dea8c8da92dULL}}
558 , // 10^(-17) * 2^174
559 {{0x41cebfcc8b9890e8ULL, 0x0024e4bba3a48757ULL}}
560 , // 10^(-18) * 2^177
561 {{0x694acc7a78f41b0dULL, 0x003b07929f6da558ULL}}
562 , // 10^(-19) * 2^181
563 {{0xbaa23d2ec729af3eULL, 0x002f394219248446ULL}}
564 , // 10^(-20) * 2^184
565 {{0xfbb4fdbf05baf298ULL, 0x0025c768141d369eULL}}
566 , // 10^(-21) * 2^187
567 {{0x2c54c931a2c4b759ULL, 0x003c7240202ebdcbULL}}
568 , // 10^(-22) * 2^191
569 {{0x89dd6dc14f03c5e1ULL, 0x00305b66802564a2ULL}}
570 , // 10^(-23) * 2^194
571 {{0xd4b1249aa59c9e4eULL, 0x0026af8533511d4eULL}}
572 , // 10^(-24) * 2^197
573 {{0x544ea0f76f60fd49ULL, 0x003de5a1ebb4fbb1ULL}}
574 , // 10^(-25) * 2^201
575 {{0x76a54d92bf80caa1ULL, 0x00318481895d9627ULL}}
576 , // 10^(-26) * 2^204
577 {{0x921dd7a89933d54eULL, 0x00279d346de4781fULL}}
578 , // 10^(-27) * 2^207
579 {{0x8362f2a75b862215ULL, 0x003f61ed7ca0c032ULL}}
580 , // 10^(-28) * 2^211
581 {{0xcf825bb91604e811ULL, 0x0032b4bdfd4d668eULL}}
582 , // 10^(-29) * 2^214
583 {{0x0c684960de6a5341ULL, 0x00289097fdd7853fULL}}
584 , // 10^(-30) * 2^217
585 {{0x3d203ab3e521dc34ULL, 0x002073accb12d0ffULL}}
586 , // 10^(-31) * 2^220
587 {{0x2e99f7863b696053ULL, 0x0033ec47ab514e65ULL}}
588 , // 10^(-32) * 2^224
589 {{0x587b2c6b62bab376ULL, 0x002989d2ef743eb7ULL}}
590 , // 10^(-33) * 2^227
591 {{0xad2f56bc4efbc2c5ULL, 0x00213b0f25f69892ULL}}
592 , // 10^(-34) * 2^230
593 {{0x0f2abc9d8c9689d1ull, 0x01a95a5b7f87a0efull}}
594 , // 35 extra digits
598 int __bid_recip_scale[] = {
599 129 - 128, // 1
600 129 - 128, // 1/10
601 129 - 128, // 1/10^2
602 129 - 128, // 1/10^3
603 3, // 131 - 128
604 6, // 134 - 128
605 9, // 137 - 128
606 13, // 141 - 128
607 16, // 144 - 128
608 19, // 147 - 128
609 23, // 151 - 128
610 26, // 154 - 128
611 29, // 157 - 128
612 33, // 161 - 128
613 36, // 164 - 128
614 39, // 167 - 128
615 43, // 171 - 128
616 46, // 174 - 128
617 49, // 177 - 128
618 53, // 181 - 128
619 56, // 184 - 128
620 59, // 187 - 128
621 63, // 191 - 128
623 66, // 194 - 128
624 69, // 197 - 128
625 73, // 201 - 128
626 76, // 204 - 128
627 79, // 207 - 128
628 83, // 211 - 128
629 86, // 214 - 128
630 89, // 217 - 128
631 92, // 220 - 128
632 96, // 224 - 128
633 99, // 227 - 128
634 102, // 230 - 128
635 109, // 237 - 128, 1/10^35
639 // tables used in computation
640 int __bid_estimate_decimal_digits[129] = {
641 1, //2^0 =1 < 10^0
642 1, //2^1 =2 < 10^1
643 1, //2^2 =4 < 10^1
644 1, //2^3 =8 < 10^1
645 2, //2^4 =16 < 10^2
646 2, //2^5 =32 < 10^2
647 2, //2^6 =64 < 10^2
648 3, //2^7 =128 < 10^3
649 3, //2^8 =256 < 10^3
650 3, //2^9 =512 < 10^3
651 4, //2^10=1024 < 10^4
652 4, //2^11=2048 < 10^4
653 4, //2^12=4096 < 10^4
654 4, //2^13=8192 < 10^4
655 5, //2^14=16384 < 10^5
656 5, //2^15=32768 < 10^5
658 5, //2^16=65536 < 10^5
659 6, //2^17=131072 < 10^6
660 6, //2^18=262144 < 10^6
661 6, //2^19=524288 < 10^6
662 7, //2^20=1048576 < 10^7
663 7, //2^21=2097152 < 10^7
664 7, //2^22=4194304 < 10^7
665 7, //2^23=8388608 < 10^7
666 8, //2^24=16777216 < 10^8
667 8, //2^25=33554432 < 10^8
668 8, //2^26=67108864 < 10^8
669 9, //2^27=134217728 < 10^9
670 9, //2^28=268435456 < 10^9
671 9, //2^29=536870912 < 10^9
672 10, //2^30=1073741824< 10^10
673 10, //2^31=2147483648< 10^10
675 10, //2^32=4294967296 < 10^10
676 10, //2^33=8589934592 < 10^10
677 11, //2^34=17179869184 < 10^11
678 11, //2^35=34359738368 < 10^11
679 11, //2^36=68719476736 < 10^11
680 12, //2^37=137438953472 < 10^12
681 12, //2^38=274877906944 < 10^12
682 12, //2^39=549755813888 < 10^12
683 13, //2^40=1099511627776 < 10^13
684 13, //2^41=2199023255552 < 10^13
685 13, //2^42=4398046511104 < 10^13
686 13, //2^43=8796093022208 < 10^13
687 14, //2^44=17592186044416 < 10^14
688 14, //2^45=35184372088832 < 10^14
689 14, //2^46=70368744177664 < 10^14
690 15, //2^47=140737488355328< 10^15
692 15, //2^48=281474976710656 < 10^15
693 15, //2^49=562949953421312 < 10^15
694 16, //2^50=1125899906842624 < 10^16
695 16, //2^51=2251799813685248 < 10^16
696 16, //2^52=4503599627370496 < 10^16
697 16, //2^53=9007199254740992 < 10^16
698 17, //2^54=18014398509481984 < 10^17
699 17, //2^55=36028797018963968 < 10^17
700 17, //2^56=72057594037927936 < 10^17
701 18, //2^57=144115188075855872 < 10^18
702 18, //2^58=288230376151711744 < 10^18
703 18, //2^59=576460752303423488 < 10^18
704 19, //2^60=1152921504606846976< 10^19
705 19, //2^61=2305843009213693952< 10^19
706 19, //2^62=4611686018427387904< 10^19
707 19, //2^63=9223372036854775808< 10^19
709 20, //2^64=18446744073709551616
710 20, //2^65=36893488147419103232
711 20, //2^66=73786976294838206464
712 21, //2^67=147573952589676412928
713 21, //2^68=295147905179352825856
714 21, //2^69=590295810358705651712
715 22, //2^70=1180591620717411303424
716 22, //2^71=2361183241434822606848
717 22, //2^72=4722366482869645213696
718 22, //2^73=9444732965739290427392
719 23, //2^74=18889465931478580854784
720 23, //2^75=37778931862957161709568
721 23, //2^76=75557863725914323419136
722 24, //2^77=151115727451828646838272
723 24, //2^78=302231454903657293676544
724 24, //2^79=604462909807314587353088
726 25, //2^80=1208925819614629174706176
727 25, //2^81=2417851639229258349412352
728 25, //2^82=4835703278458516698824704
729 25, //2^83=9671406556917033397649408
730 26, //2^84=19342813113834066795298816
731 26, //2^85=38685626227668133590597632
732 26, //2^86=77371252455336267181195264
733 27, //2^87=154742504910672534362390528
734 27, //2^88=309485009821345068724781056
735 27, //2^89=618970019642690137449562112
736 28, //2^90=1237940039285380274899124224
737 28, //2^91=2475880078570760549798248448
738 28, //2^92=4951760157141521099596496896
739 28, //2^93=9903520314283042199192993792
740 29, //2^94=19807040628566084398385987584
741 29, //2^95=39614081257132168796771975168
742 29, //2^96=79228162514264337593543950336
744 30, //2^97=158456325028528675187087900672
745 30, //2^98=316912650057057350374175801344
746 30, //2^99=633825300114114700748351602688
747 31, //2^100=1267650600228229401496703205376
748 31, //2^101=2535301200456458802993406410752
749 31, //2^102=5070602400912917605986812821504
750 32, //2^103=10141204801825835211973625643008
751 32, //2^104=20282409603651670423947251286016
752 32, //2^105=40564819207303340847894502572032
753 32, //2^106=81129638414606681695789005144064
754 33, //2^107=162259276829213363391578010288128
755 33, // 2^108
756 33, // 2^109
757 34, // 2^110
758 34, // 2^111
759 34, // 2^112
760 35, // 2^113
761 35, // 2^114
762 35, // 2^115
763 35, // 2^116
764 36, // 2^117
765 36, // 2^118
766 36, // 2^119
767 37, // 2^120
768 37, // 2^121
769 37, // 2^122
770 38, // 2^123
771 38, // 2^124
772 38, // 2^125
773 38, // 2^126
774 39, // 2^127
775 39 // 2^128
779 UINT128 __bid_power10_table_128[] = {
780 {{0x0000000000000001ull, 0x0000000000000000ull}}, // 10^0
781 {{0x000000000000000aull, 0x0000000000000000ull}}, // 10^1
782 {{0x0000000000000064ull, 0x0000000000000000ull}}, // 10^2
783 {{0x00000000000003e8ull, 0x0000000000000000ull}}, // 10^3
784 {{0x0000000000002710ull, 0x0000000000000000ull}}, // 10^4
785 {{0x00000000000186a0ull, 0x0000000000000000ull}}, // 10^5
786 {{0x00000000000f4240ull, 0x0000000000000000ull}}, // 10^6
787 {{0x0000000000989680ull, 0x0000000000000000ull}}, // 10^7
788 {{0x0000000005f5e100ull, 0x0000000000000000ull}}, // 10^8
789 {{0x000000003b9aca00ull, 0x0000000000000000ull}}, // 10^9
790 {{0x00000002540be400ull, 0x0000000000000000ull}}, // 10^10
791 {{0x000000174876e800ull, 0x0000000000000000ull}}, // 10^11
792 {{0x000000e8d4a51000ull, 0x0000000000000000ull}}, // 10^12
793 {{0x000009184e72a000ull, 0x0000000000000000ull}}, // 10^13
794 {{0x00005af3107a4000ull, 0x0000000000000000ull}}, // 10^14
795 {{0x00038d7ea4c68000ull, 0x0000000000000000ull}}, // 10^15
796 {{0x002386f26fc10000ull, 0x0000000000000000ull}}, // 10^16
797 {{0x016345785d8a0000ull, 0x0000000000000000ull}}, // 10^17
798 {{0x0de0b6b3a7640000ull, 0x0000000000000000ull}}, // 10^18
799 {{0x8ac7230489e80000ull, 0x0000000000000000ull}}, // 10^19
800 {{0x6bc75e2d63100000ull, 0x0000000000000005ull}}, // 10^20
801 {{0x35c9adc5dea00000ull, 0x0000000000000036ull}}, // 10^21
802 {{0x19e0c9bab2400000ull, 0x000000000000021eull}}, // 10^22
803 {{0x02c7e14af6800000ull, 0x000000000000152dull}}, // 10^23
804 {{0x1bcecceda1000000ull, 0x000000000000d3c2ull}}, // 10^24
805 {{0x161401484a000000ull, 0x0000000000084595ull}}, // 10^25
806 {{0xdcc80cd2e4000000ull, 0x000000000052b7d2ull}}, // 10^26
807 {{0x9fd0803ce8000000ull, 0x00000000033b2e3cull}}, // 10^27
808 {{0x3e25026110000000ull, 0x00000000204fce5eull}}, // 10^28
809 {{0x6d7217caa0000000ull, 0x00000001431e0faeull}}, // 10^29
810 {{0x4674edea40000000ull, 0x0000000c9f2c9cd0ull}}, // 10^30
811 {{0xc0914b2680000000ull, 0x0000007e37be2022ull}}, // 10^31
812 {{0x85acef8100000000ull, 0x000004ee2d6d415bull}}, // 10^32
813 {{0x38c15b0a00000000ull, 0x0000314dc6448d93ull}}, // 10^33
814 {{0x378d8e6400000000ull, 0x0001ed09bead87c0ull}}, // 10^34
815 {{0x2b878fe800000000ull, 0x0013426172c74d82ull}}, // 10^35
816 {{0xb34b9f1000000000ull, 0x00c097ce7bc90715ull}}, // 10^36
817 {{0x00f436a000000000ull, 0x0785ee10d5da46d9ull}}, // 10^37
818 {{0x098a224000000000ull, 0x4b3b4ca85a86c47aull}}, // 10^38
822 int __bid_estimate_bin_expon[] = {
823 0, // 10^0
824 3, // 10^1
825 6, // 10^2
826 9, // 10^3
827 13, // 10^4
828 16, // 10^5
829 19, // 10^6
830 23, // 10^7
831 26, // 10^8
832 29, // 10^9
833 33, // 10^10
834 36, // 10^11
835 39, // 10^12
836 43, // 10^13
837 46, // 10^14
838 49, // 10^15
839 53 // 10^16
843 UINT64 __bid_power10_index_binexp[] = {
844 0x000000000000000aull,
845 0x000000000000000aull,
846 0x000000000000000aull,
847 0x000000000000000aull,
848 0x0000000000000064ull,
849 0x0000000000000064ull,
850 0x0000000000000064ull,
851 0x00000000000003e8ull,
852 0x00000000000003e8ull,
853 0x00000000000003e8ull,
854 0x0000000000002710ull,
855 0x0000000000002710ull,
856 0x0000000000002710ull,
857 0x0000000000002710ull,
858 0x00000000000186a0ull,
859 0x00000000000186a0ull,
860 0x00000000000186a0ull,
861 0x00000000000f4240ull,
862 0x00000000000f4240ull,
863 0x00000000000f4240ull,
864 0x0000000000989680ull,
865 0x0000000000989680ull,
866 0x0000000000989680ull,
867 0x0000000000989680ull,
868 0x0000000005f5e100ull,
869 0x0000000005f5e100ull,
870 0x0000000005f5e100ull,
871 0x000000003b9aca00ull,
872 0x000000003b9aca00ull,
873 0x000000003b9aca00ull,
874 0x00000002540be400ull,
875 0x00000002540be400ull,
876 0x00000002540be400ull,
877 0x00000002540be400ull,
878 0x000000174876e800ull,
879 0x000000174876e800ull,
880 0x000000174876e800ull,
881 0x000000e8d4a51000ull,
882 0x000000e8d4a51000ull,
883 0x000000e8d4a51000ull,
884 0x000009184e72a000ull,
885 0x000009184e72a000ull,
886 0x000009184e72a000ull,
887 0x000009184e72a000ull,
888 0x00005af3107a4000ull,
889 0x00005af3107a4000ull,
890 0x00005af3107a4000ull,
891 0x00038d7ea4c68000ull,
892 0x00038d7ea4c68000ull,
893 0x00038d7ea4c68000ull,
894 0x002386f26fc10000ull,
895 0x002386f26fc10000ull,
896 0x002386f26fc10000ull,
897 0x002386f26fc10000ull,
898 0x016345785d8a0000ull,
899 0x016345785d8a0000ull,
900 0x016345785d8a0000ull,
901 0x0de0b6b3a7640000ull,
902 0x0de0b6b3a7640000ull,
903 0x0de0b6b3a7640000ull,
904 0x8ac7230489e80000ull,
905 0x8ac7230489e80000ull,
906 0x8ac7230489e80000ull,
907 0x8ac7230489e80000ull
911 int __bid_short_recip_scale[] = {
913 65 - 64,
914 69 - 64,
915 71 - 64,
916 75 - 64,
917 78 - 64,
918 81 - 64,
919 85 - 64,
920 88 - 64,
921 91 - 64,
922 95 - 64,
923 98 - 64,
924 101 - 64,
925 105 - 64,
926 108 - 64,
927 111 - 64,
928 115 - 64, //114 - 64
929 118 - 64
933 UINT64 __bid_reciprocals10_64[] = {
934 1ull, // dummy value for 0 extra digits
935 0x3333333333333334ull, // 1 extra digit
936 0x51eb851eb851eb86ull,
937 0x20c49ba5e353f7cfull,
938 0x346dc5d63886594bull,
939 0x29f16b11c6d1e109ull,
940 0x218def416bdb1a6eull,
941 0x35afe535795e90b0ull,
942 0x2af31dc4611873c0ull,
943 0x225c17d04dad2966ull,
944 0x36f9bfb3af7b7570ull,
945 0x2bfaffc2f2c92ac0ull,
946 0x232f33025bd42233ull,
947 0x384b84d092ed0385ull,
948 0x2d09370d42573604ull,
949 0x24075f3dceac2b37ull,
950 0x39a5652fb1137857ull,
951 0x2e1dea8c8da92d13ull
956 UINT128 __bid_power10_index_binexp_128[] = {
957 {{0x000000000000000aull, 0x0000000000000000ull}},
958 {{0x000000000000000aull, 0x0000000000000000ull}},
959 {{0x000000000000000aull, 0x0000000000000000ull}},
960 {{0x000000000000000aull, 0x0000000000000000ull}},
961 {{0x0000000000000064ull, 0x0000000000000000ull}},
962 {{0x0000000000000064ull, 0x0000000000000000ull}},
963 {{0x0000000000000064ull, 0x0000000000000000ull}},
964 {{0x00000000000003e8ull, 0x0000000000000000ull}},
965 {{0x00000000000003e8ull, 0x0000000000000000ull}},
966 {{0x00000000000003e8ull, 0x0000000000000000ull}},
967 {{0x0000000000002710ull, 0x0000000000000000ull}},
968 {{0x0000000000002710ull, 0x0000000000000000ull}},
969 {{0x0000000000002710ull, 0x0000000000000000ull}},
970 {{0x0000000000002710ull, 0x0000000000000000ull}},
971 {{0x00000000000186a0ull, 0x0000000000000000ull}},
972 {{0x00000000000186a0ull, 0x0000000000000000ull}},
973 {{0x00000000000186a0ull, 0x0000000000000000ull}},
974 {{0x00000000000f4240ull, 0x0000000000000000ull}},
975 {{0x00000000000f4240ull, 0x0000000000000000ull}},
976 {{0x00000000000f4240ull, 0x0000000000000000ull}},
977 {{0x0000000000989680ull, 0x0000000000000000ull}},
978 {{0x0000000000989680ull, 0x0000000000000000ull}},
979 {{0x0000000000989680ull, 0x0000000000000000ull}},
980 {{0x0000000000989680ull, 0x0000000000000000ull}},
981 {{0x0000000005f5e100ull, 0x0000000000000000ull}},
982 {{0x0000000005f5e100ull, 0x0000000000000000ull}},
983 {{0x0000000005f5e100ull, 0x0000000000000000ull}},
984 {{0x000000003b9aca00ull, 0x0000000000000000ull}},
985 {{0x000000003b9aca00ull, 0x0000000000000000ull}},
986 {{0x000000003b9aca00ull, 0x0000000000000000ull}},
987 {{0x00000002540be400ull, 0x0000000000000000ull}},
988 {{0x00000002540be400ull, 0x0000000000000000ull}},
989 {{0x00000002540be400ull, 0x0000000000000000ull}},
990 {{0x00000002540be400ull, 0x0000000000000000ull}},
991 {{0x000000174876e800ull, 0x0000000000000000ull}},
992 {{0x000000174876e800ull, 0x0000000000000000ull}},
993 {{0x000000174876e800ull, 0x0000000000000000ull}},
994 {{0x000000e8d4a51000ull, 0x0000000000000000ull}},
995 {{0x000000e8d4a51000ull, 0x0000000000000000ull}},
996 {{0x000000e8d4a51000ull, 0x0000000000000000ull}},
997 {{0x000009184e72a000ull, 0x0000000000000000ull}},
998 {{0x000009184e72a000ull, 0x0000000000000000ull}},
999 {{0x000009184e72a000ull, 0x0000000000000000ull}},
1000 {{0x000009184e72a000ull, 0x0000000000000000ull}},
1001 {{0x00005af3107a4000ull, 0x0000000000000000ull}},
1002 {{0x00005af3107a4000ull, 0x0000000000000000ull}},
1003 {{0x00005af3107a4000ull, 0x0000000000000000ull}},
1004 {{0x00038d7ea4c68000ull, 0x0000000000000000ull}},
1005 {{0x00038d7ea4c68000ull, 0x0000000000000000ull}},
1006 {{0x00038d7ea4c68000ull, 0x0000000000000000ull}},
1007 {{0x002386f26fc10000ull, 0x0000000000000000ull}},
1008 {{0x002386f26fc10000ull, 0x0000000000000000ull}},
1009 {{0x002386f26fc10000ull, 0x0000000000000000ull}},
1010 {{0x002386f26fc10000ull, 0x0000000000000000ull}},
1011 {{0x016345785d8a0000ull, 0x0000000000000000ull}},
1012 {{0x016345785d8a0000ull, 0x0000000000000000ull}},
1013 {{0x016345785d8a0000ull, 0x0000000000000000ull}},
1014 {{0x0de0b6b3a7640000ull, 0x0000000000000000ull}},
1015 {{0x0de0b6b3a7640000ull, 0x0000000000000000ull}},
1016 {{0x0de0b6b3a7640000ull, 0x0000000000000000ull}},
1017 {{0x8ac7230489e80000ull, 0x0000000000000000ull}},
1018 {{0x8ac7230489e80000ull, 0x0000000000000000ull}},
1019 {{0x8ac7230489e80000ull, 0x0000000000000000ull}},
1020 {{0x8ac7230489e80000ull, 0x0000000000000000ull}},
1021 {{0x6bc75e2d63100000ull, 0x0000000000000005ull}}, // 10^20
1022 {{0x6bc75e2d63100000ull, 0x0000000000000005ull}}, // 10^20
1023 {{0x6bc75e2d63100000ull, 0x0000000000000005ull}}, // 10^20
1024 {{0x35c9adc5dea00000ull, 0x0000000000000036ull}}, // 10^21
1025 {{0x35c9adc5dea00000ull, 0x0000000000000036ull}}, // 10^21
1026 {{0x35c9adc5dea00000ull, 0x0000000000000036ull}}, // 10^21
1027 {{0x19e0c9bab2400000ull, 0x000000000000021eull}}, // 10^22
1028 {{0x19e0c9bab2400000ull, 0x000000000000021eull}}, // 10^22
1029 {{0x19e0c9bab2400000ull, 0x000000000000021eull}}, // 10^22
1030 {{0x19e0c9bab2400000ull, 0x000000000000021eull}}, // 10^22
1031 {{0x02c7e14af6800000ull, 0x000000000000152dull}}, // 10^23
1032 {{0x02c7e14af6800000ull, 0x000000000000152dull}}, // 10^23
1033 {{0x02c7e14af6800000ull, 0x000000000000152dull}}, // 10^23
1034 {{0x1bcecceda1000000ull, 0x000000000000d3c2ull}}, // 10^24
1035 {{0x1bcecceda1000000ull, 0x000000000000d3c2ull}}, // 10^24
1036 {{0x1bcecceda1000000ull, 0x000000000000d3c2ull}}, // 10^24
1037 {{0x161401484a000000ull, 0x0000000000084595ull}}, // 10^25
1038 {{0x161401484a000000ull, 0x0000000000084595ull}}, // 10^25
1039 {{0x161401484a000000ull, 0x0000000000084595ull}}, // 10^25
1040 {{0x161401484a000000ull, 0x0000000000084595ull}}, // 10^25
1041 {{0xdcc80cd2e4000000ull, 0x000000000052b7d2ull}}, // 10^26
1042 {{0xdcc80cd2e4000000ull, 0x000000000052b7d2ull}}, // 10^26
1043 {{0xdcc80cd2e4000000ull, 0x000000000052b7d2ull}}, // 10^26
1044 {{0x9fd0803ce8000000ull, 0x00000000033b2e3cull}}, // 10^27
1045 {{0x9fd0803ce8000000ull, 0x00000000033b2e3cull}}, // 10^27
1046 {{0x9fd0803ce8000000ull, 0x00000000033b2e3cull}}, // 10^27
1047 {{0x3e25026110000000ull, 0x00000000204fce5eull}}, // 10^28
1048 {{0x3e25026110000000ull, 0x00000000204fce5eull}}, // 10^28
1049 {{0x3e25026110000000ull, 0x00000000204fce5eull}}, // 10^28
1050 {{0x3e25026110000000ull, 0x00000000204fce5eull}}, // 10^28
1051 {{0x6d7217caa0000000ull, 0x00000001431e0faeull}}, // 10^29
1052 {{0x6d7217caa0000000ull, 0x00000001431e0faeull}}, // 10^29
1053 {{0x6d7217caa0000000ull, 0x00000001431e0faeull}}, // 10^29
1054 {{0x4674edea40000000ull, 0x0000000c9f2c9cd0ull}}, // 10^30
1055 {{0x4674edea40000000ull, 0x0000000c9f2c9cd0ull}}, // 10^30
1056 {{0x4674edea40000000ull, 0x0000000c9f2c9cd0ull}}, // 10^30
1057 {{0xc0914b2680000000ull, 0x0000007e37be2022ull}}, // 10^31
1058 {{0xc0914b2680000000ull, 0x0000007e37be2022ull}}, // 10^31
1059 {{0xc0914b2680000000ull, 0x0000007e37be2022ull}}, // 10^31
1060 {{0x85acef8100000000ull, 0x000004ee2d6d415bull}}, // 10^32
1061 {{0x85acef8100000000ull, 0x000004ee2d6d415bull}}, // 10^32
1062 {{0x85acef8100000000ull, 0x000004ee2d6d415bull}}, // 10^32
1063 {{0x85acef8100000000ull, 0x000004ee2d6d415bull}}, // 10^32
1064 {{0x38c15b0a00000000ull, 0x0000314dc6448d93ull}}, // 10^33
1065 {{0x38c15b0a00000000ull, 0x0000314dc6448d93ull}}, // 10^33
1066 {{0x38c15b0a00000000ull, 0x0000314dc6448d93ull}}, // 10^33, entry 112
1067 {{0x378d8e6400000000ull, 0x0001ed09bead87c0ull}}, // 10^34
1068 {{0x378d8e6400000000ull, 0x0001ed09bead87c0ull}}, // 10^34
1069 {{0x378d8e6400000000ull, 0x0001ed09bead87c0ull}}, // 10^34
1070 {{0x2b878fe800000000ull, 0x0013426172c74d82ull}}, // 10^35
1071 {{0x2b878fe800000000ull, 0x0013426172c74d82ull}}, // 10^35
1072 {{0x2b878fe800000000ull, 0x0013426172c74d82ull}}, // 10^35
1073 {{0x2b878fe800000000ull, 0x0013426172c74d82ull}}, // 10^35
1074 {{0xb34b9f1000000000ull, 0x00c097ce7bc90715ull}}, // 10^36
1075 {{0x00f436a000000000ull, 0x0785ee10d5da46d9ull}}, // 10^37
1076 {{0x00f436a000000000ull, 0x0785ee10d5da46d9ull}}, // 10^37
1077 {{0x00f436a000000000ull, 0x0785ee10d5da46d9ull}}, // 10^37
1078 {{0x098a224000000000ull, 0x4b3b4ca85a86c47aull}}, // 10^38
1079 {{0x098a224000000000ull, 0x4b3b4ca85a86c47aull}}, // 10^38
1080 {{0x098a224000000000ull, 0x4b3b4ca85a86c47aull}}, // 10^38
1081 {{0x098a224000000000ull, 0x4b3b4ca85a86c47aull}}, // 10^38