1 /* Copyright (C) 2007-2018 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 3, or (at your option) any later
10 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
11 WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15 Under Section 7 of GPL version 3, you are granted additional
16 permissions described in the GCC Runtime Library Exception, version
17 3.1, as published by the Free Software Foundation.
19 You should have received a copy of the GNU General Public License and
20 a copy of the GCC Runtime Library Exception along with this program;
21 see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
22 <http://www.gnu.org/licenses/>. */
24 #include "bid_internal.h"
26 UINT64 round_const_table
[][19] = {
28 0ull, // 0 extra digits
29 5ull, // 1 extra digits
30 50ull, // 2 extra digits
31 500ull, // 3 extra digits
32 5000ull, // 4 extra digits
33 50000ull, // 5 extra digits
34 500000ull, // 6 extra digits
35 5000000ull, // 7 extra digits
36 50000000ull, // 8 extra digits
37 500000000ull, // 9 extra digits
38 5000000000ull, // 10 extra digits
39 50000000000ull, // 11 extra digits
40 500000000000ull, // 12 extra digits
41 5000000000000ull, // 13 extra digits
42 50000000000000ull, // 14 extra digits
43 500000000000000ull, // 15 extra digits
44 5000000000000000ull, // 16 extra digits
45 50000000000000000ull, // 17 extra digits
46 500000000000000000ull // 18 extra digits
50 0ull, // 0 extra digits
51 0ull, // 1 extra digits
52 0ull, // 2 extra digits
53 00ull, // 3 extra digits
54 000ull, // 4 extra digits
55 0000ull, // 5 extra digits
56 00000ull, // 6 extra digits
57 000000ull, // 7 extra digits
58 0000000ull, // 8 extra digits
59 00000000ull, // 9 extra digits
60 000000000ull, // 10 extra digits
61 0000000000ull, // 11 extra digits
62 00000000000ull, // 12 extra digits
63 000000000000ull, // 13 extra digits
64 0000000000000ull, // 14 extra digits
65 00000000000000ull, // 15 extra digits
66 000000000000000ull, // 16 extra digits
67 0000000000000000ull, // 17 extra digits
68 00000000000000000ull // 18 extra digits
72 0ull, // 0 extra digits
73 9ull, // 1 extra digits
74 99ull, // 2 extra digits
75 999ull, // 3 extra digits
76 9999ull, // 4 extra digits
77 99999ull, // 5 extra digits
78 999999ull, // 6 extra digits
79 9999999ull, // 7 extra digits
80 99999999ull, // 8 extra digits
81 999999999ull, // 9 extra digits
82 9999999999ull, // 10 extra digits
83 99999999999ull, // 11 extra digits
84 999999999999ull, // 12 extra digits
85 9999999999999ull, // 13 extra digits
86 99999999999999ull, // 14 extra digits
87 999999999999999ull, // 15 extra digits
88 9999999999999999ull, // 16 extra digits
89 99999999999999999ull, // 17 extra digits
90 999999999999999999ull // 18 extra digits
94 0ull, // 0 extra digits
95 0ull, // 1 extra digits
96 0ull, // 2 extra digits
97 00ull, // 3 extra digits
98 000ull, // 4 extra digits
99 0000ull, // 5 extra digits
100 00000ull, // 6 extra digits
101 000000ull, // 7 extra digits
102 0000000ull, // 8 extra digits
103 00000000ull, // 9 extra digits
104 000000000ull, // 10 extra digits
105 0000000000ull, // 11 extra digits
106 00000000000ull, // 12 extra digits
107 000000000000ull, // 13 extra digits
108 0000000000000ull, // 14 extra digits
109 00000000000000ull, // 15 extra digits
110 000000000000000ull, // 16 extra digits
111 0000000000000000ull, // 17 extra digits
112 00000000000000000ull // 18 extra digits
115 { // round ties away from 0
116 0ull, // 0 extra digits
117 5ull, // 1 extra digits
118 50ull, // 2 extra digits
119 500ull, // 3 extra digits
120 5000ull, // 4 extra digits
121 50000ull, // 5 extra digits
122 500000ull, // 6 extra digits
123 5000000ull, // 7 extra digits
124 50000000ull, // 8 extra digits
125 500000000ull, // 9 extra digits
126 5000000000ull, // 10 extra digits
127 50000000000ull, // 11 extra digits
128 500000000000ull, // 12 extra digits
129 5000000000000ull, // 13 extra digits
130 50000000000000ull, // 14 extra digits
131 500000000000000ull, // 15 extra digits
132 5000000000000000ull, // 16 extra digits
133 50000000000000000ull, // 17 extra digits
134 500000000000000000ull // 18 extra digits
139 UINT128 round_const_table_128
[][36] = {
168 {{500000000ull, 0ull}
171 {{5000000000ull, 0ull}
174 {{50000000000ull, 0ull}
177 {{500000000000ull, 0ull}
180 {{5000000000000ull, 0ull}
183 {{50000000000000ull, 0ull}
186 {{500000000000000ull, 0ull}
189 {{5000000000000000ull, 0ull}
192 {{50000000000000000ull, 0ull}
195 {{500000000000000000ull, 0ull}
198 {{5000000000000000000ull, 0ull}
201 {{0xb5e3af16b1880000ull
, 2ull}
204 {{0x1ae4d6e2ef500000ull
, 27ull}
207 {{0xcf064dd59200000ull
, 271ull}
210 {{0x8163f0a57b400000ull
, 2710ull}
213 {{0xde76676d0800000ull
, 27105ull}
216 {{0x8b0a00a425000000ull
, 0x422caull
}
219 {{0x6e64066972000000ull
, 0x295be9ull
}
222 {{0x4fe8401e74000000ull
, 0x19d971eull
}
225 {{0x1f12813088000000ull
, 0x1027e72full
}
228 {{0x36b90be550000000ull
, 0xa18f07d7ull
}
231 {{0x233a76f520000000ull
, 0x64f964e68ull
}
234 {{0x6048a59340000000ull
, 0x3f1bdf1011ull
}
237 {{0xc2d677c080000000ull
, 0x27716b6a0adull
}
240 {{0x9c60ad8500000000ull
, 0x18a6e32246c9ull
}
243 {{0x1bc6c73200000000ull
, 0xf684df56c3e0ull
}
246 {{0x15c3c7f400000000ull
, 0x9a130b963a6c1ull
}
282 {{000000000ull, 0ull}
285 {{0000000000ull, 0ull}
288 {{00000000000ull, 0ull}
291 {{000000000000ull, 0ull}
294 {{0000000000000ull, 0ull}
297 {{00000000000000ull, 0ull}
300 {{000000000000000ull, 0ull}
303 {{0000000000000000ull, 0ull}
306 {{00000000000000000ull, 0ull}
309 {{000000000000000000ull, 0ull}
390 {{999999999ull, 0ull}
393 {{9999999999ull, 0ull}
396 {{99999999999ull, 0ull}
399 {{999999999999ull, 0ull}
402 {{9999999999999ull, 0ull}
405 {{99999999999999ull, 0ull}
408 {{999999999999999ull, 0ull}
411 {{9999999999999999ull, 0ull}
414 {{99999999999999999ull, 0ull}
417 {{999999999999999999ull, 0ull}
420 {{9999999999999999999ull, 0ull}
423 {{0x6BC75E2D630FFFFFull
, 0x5ull
}
426 {{0x35C9ADC5DE9FFFFFull
, 0x36ull
}
429 {{0x19E0C9BAB23FFFFFull
, 0x21eull
}
432 {{0x2C7E14AF67FFFFFull
, 0x152dull
}
435 {{0x1BCECCEDA0FFFFFFull
, 0xd3c2ull
}
438 {{0x1614014849FFFFFFull
, 0x84595ull
}
441 {{0xDCC80CD2E3FFFFFFull
, 0x52b7d2ull
}
444 {{0x9FD0803CE7FFFFFFull
, 0x33B2E3Cull
}
447 {{0x3E2502610FFFFFFFull
, 0x204FCE5Eull
}
450 {{0x6D7217CA9FFFFFFFull
, 0x1431E0FAEull
}
453 {{0x4674EDEA3FFFFFFFull
, 0xC9F2C9CD0ull
}
456 {{0xC0914B267FFFFFFFull
, 0x7E37BE2022ull
}
459 {{0x85ACEF80FFFFFFFFull
, 0x4EE2D6D415Bull
}
462 {{0x38c15b09ffffffffull
, 0x314dc6448d93ull
}
465 {{0x378d8e63ffffffffull
, 0x1ed09bead87c0ull
}
468 {{0x2b878fe7ffffffffull
, 0x13426172c74d82ull
}
504 {{000000000ull, 0ull}
507 {{0000000000ull, 0ull}
510 {{00000000000ull, 0ull}
513 {{000000000000ull, 0ull}
516 {{0000000000000ull, 0ull}
519 {{00000000000000ull, 0ull}
522 {{000000000000000ull, 0ull}
525 {{0000000000000000ull, 0ull}
528 {{00000000000000000ull, 0ull}
531 {{000000000000000000ull, 0ull}
612 {{500000000ull, 0ull}
615 {{5000000000ull, 0ull}
618 {{50000000000ull, 0ull}
621 {{500000000000ull, 0ull}
624 {{5000000000000ull, 0ull}
627 {{50000000000000ull, 0ull}
630 {{500000000000000ull, 0ull}
633 {{5000000000000000ull, 0ull}
636 {{50000000000000000ull, 0ull}
639 {{500000000000000000ull, 0ull}
642 {{5000000000000000000ull, 0ull}
645 {{0xb5e3af16b1880000ull
, 2ull}
648 {{0x1ae4d6e2ef500000ull
, 27ull}
651 {{0xcf064dd59200000ull
, 271ull}
654 {{0x8163f0a57b400000ull
, 2710ull}
657 {{0xde76676d0800000ull
, 27105ull}
660 {{0x8b0a00a425000000ull
, 0x422caull
}
663 {{0x6e64066972000000ull
, 0x295be9ull
}
666 {{0x4fe8401e74000000ull
, 0x19d971eull
}
669 {{0x1f12813088000000ull
, 0x1027e72full
}
672 {{0x36b90be550000000ull
, 0xa18f07d7ull
}
675 {{0x233a76f520000000ull
, 0x64f964e68ull
}
678 {{0x6048a59340000000ull
, 0x3f1bdf1011ull
}
681 {{0xc2d677c080000000ull
, 0x27716b6a0adull
}
684 {{0x9c60ad8500000000ull
, 0x18a6e32246c9ull
}
687 {{0x1bc6c73200000000ull
, 0xf684df56c3e0ull
}
690 {{0x15c3c7f400000000ull
, 0x9a130b963a6c1ull
}
697 UINT128 reciprocals10_128
[] = {
701 {{0x3333333333333334ull
, 0x3333333333333333ull
}
704 {{0x51eb851eb851eb86ull
, 0x051eb851eb851eb8ull
}
707 {{0x3b645a1cac083127ull
, 0x0083126e978d4fdfull
}
710 {{0x4af4f0d844d013aaULL
, 0x00346dc5d6388659ULL
}
713 {{0x08c3f3e0370cdc88ULL
, 0x0029f16b11c6d1e1ULL
}
716 {{0x6d698fe69270b06dULL
, 0x00218def416bdb1aULL
}
719 {{0xaf0f4ca41d811a47ULL
, 0x0035afe535795e90ULL
}
722 {{0xbf3f70834acdaea0ULL
, 0x002af31dc4611873ULL
}
725 {{0x65cc5a02a23e254dULL
, 0x00225c17d04dad29ULL
}
728 {{0x6fad5cd10396a214ULL
, 0x0036f9bfb3af7b75ULL
}
730 , // 10^(-10) * 2^151
731 {{0xbfbde3da69454e76ULL
, 0x002bfaffc2f2c92aULL
}
733 , // 10^(-11) * 2^154
734 {{0x32fe4fe1edd10b92ULL
, 0x00232f33025bd422ULL
}
736 , // 10^(-12) * 2^157
737 {{0x84ca19697c81ac1cULL
, 0x00384b84d092ed03ULL
}
739 , // 10^(-13) * 2^161
740 {{0x03d4e1213067bce4ULL
, 0x002d09370d425736ULL
}
742 , // 10^(-14) * 2^164
743 {{0x3643e74dc052fd83ULL
, 0x0024075f3dceac2bULL
}
745 , // 10^(-15) * 2^167
746 {{0x56d30baf9a1e626bULL
, 0x0039a5652fb11378ULL
}
748 , // 10^(-16) * 2^171
749 {{0x12426fbfae7eb522ULL
, 0x002e1dea8c8da92dULL
}
751 , // 10^(-17) * 2^174
752 {{0x41cebfcc8b9890e8ULL
, 0x0024e4bba3a48757ULL
}
754 , // 10^(-18) * 2^177
755 {{0x694acc7a78f41b0dULL
, 0x003b07929f6da558ULL
}
757 , // 10^(-19) * 2^181
758 {{0xbaa23d2ec729af3eULL
, 0x002f394219248446ULL
}
760 , // 10^(-20) * 2^184
761 {{0xfbb4fdbf05baf298ULL
, 0x0025c768141d369eULL
}
763 , // 10^(-21) * 2^187
764 {{0x2c54c931a2c4b759ULL
, 0x003c7240202ebdcbULL
}
766 , // 10^(-22) * 2^191
767 {{0x89dd6dc14f03c5e1ULL
, 0x00305b66802564a2ULL
}
769 , // 10^(-23) * 2^194
770 {{0xd4b1249aa59c9e4eULL
, 0x0026af8533511d4eULL
}
772 , // 10^(-24) * 2^197
773 {{0x544ea0f76f60fd49ULL
, 0x003de5a1ebb4fbb1ULL
}
775 , // 10^(-25) * 2^201
776 {{0x76a54d92bf80caa1ULL
, 0x00318481895d9627ULL
}
778 , // 10^(-26) * 2^204
779 {{0x921dd7a89933d54eULL
, 0x00279d346de4781fULL
}
781 , // 10^(-27) * 2^207
782 {{0x8362f2a75b862215ULL
, 0x003f61ed7ca0c032ULL
}
784 , // 10^(-28) * 2^211
785 {{0xcf825bb91604e811ULL
, 0x0032b4bdfd4d668eULL
}
787 , // 10^(-29) * 2^214
788 {{0x0c684960de6a5341ULL
, 0x00289097fdd7853fULL
}
790 , // 10^(-30) * 2^217
791 {{0x3d203ab3e521dc34ULL
, 0x002073accb12d0ffULL
}
793 , // 10^(-31) * 2^220
794 {{0x2e99f7863b696053ULL
, 0x0033ec47ab514e65ULL
}
796 , // 10^(-32) * 2^224
797 {{0x587b2c6b62bab376ULL
, 0x002989d2ef743eb7ULL
}
799 , // 10^(-33) * 2^227
800 {{0xad2f56bc4efbc2c5ULL
, 0x00213b0f25f69892ULL
}
802 , // 10^(-34) * 2^230
803 {{0x0f2abc9d8c9689d1ull
, 0x01a95a5b7f87a0efull
}
809 int recip_scale
[] = {
846 109, // 237 - 128, 1/10^35
850 // tables used in computation
851 int estimate_decimal_digits
[129] = {
862 4, //2^10=1024 < 10^4
863 4, //2^11=2048 < 10^4
864 4, //2^12=4096 < 10^4
865 4, //2^13=8192 < 10^4
866 5, //2^14=16384 < 10^5
867 5, //2^15=32768 < 10^5
869 5, //2^16=65536 < 10^5
870 6, //2^17=131072 < 10^6
871 6, //2^18=262144 < 10^6
872 6, //2^19=524288 < 10^6
873 7, //2^20=1048576 < 10^7
874 7, //2^21=2097152 < 10^7
875 7, //2^22=4194304 < 10^7
876 7, //2^23=8388608 < 10^7
877 8, //2^24=16777216 < 10^8
878 8, //2^25=33554432 < 10^8
879 8, //2^26=67108864 < 10^8
880 9, //2^27=134217728 < 10^9
881 9, //2^28=268435456 < 10^9
882 9, //2^29=536870912 < 10^9
883 10, //2^30=1073741824< 10^10
884 10, //2^31=2147483648< 10^10
886 10, //2^32=4294967296 < 10^10
887 10, //2^33=8589934592 < 10^10
888 11, //2^34=17179869184 < 10^11
889 11, //2^35=34359738368 < 10^11
890 11, //2^36=68719476736 < 10^11
891 12, //2^37=137438953472 < 10^12
892 12, //2^38=274877906944 < 10^12
893 12, //2^39=549755813888 < 10^12
894 13, //2^40=1099511627776 < 10^13
895 13, //2^41=2199023255552 < 10^13
896 13, //2^42=4398046511104 < 10^13
897 13, //2^43=8796093022208 < 10^13
898 14, //2^44=17592186044416 < 10^14
899 14, //2^45=35184372088832 < 10^14
900 14, //2^46=70368744177664 < 10^14
901 15, //2^47=140737488355328< 10^15
903 15, //2^48=281474976710656 < 10^15
904 15, //2^49=562949953421312 < 10^15
905 16, //2^50=1125899906842624 < 10^16
906 16, //2^51=2251799813685248 < 10^16
907 16, //2^52=4503599627370496 < 10^16
908 16, //2^53=9007199254740992 < 10^16
909 17, //2^54=18014398509481984 < 10^17
910 17, //2^55=36028797018963968 < 10^17
911 17, //2^56=72057594037927936 < 10^17
912 18, //2^57=144115188075855872 < 10^18
913 18, //2^58=288230376151711744 < 10^18
914 18, //2^59=576460752303423488 < 10^18
915 19, //2^60=1152921504606846976< 10^19
916 19, //2^61=2305843009213693952< 10^19
917 19, //2^62=4611686018427387904< 10^19
918 19, //2^63=9223372036854775808< 10^19
920 20, //2^64=18446744073709551616
921 20, //2^65=36893488147419103232
922 20, //2^66=73786976294838206464
923 21, //2^67=147573952589676412928
924 21, //2^68=295147905179352825856
925 21, //2^69=590295810358705651712
926 22, //2^70=1180591620717411303424
927 22, //2^71=2361183241434822606848
928 22, //2^72=4722366482869645213696
929 22, //2^73=9444732965739290427392
930 23, //2^74=18889465931478580854784
931 23, //2^75=37778931862957161709568
932 23, //2^76=75557863725914323419136
933 24, //2^77=151115727451828646838272
934 24, //2^78=302231454903657293676544
935 24, //2^79=604462909807314587353088
937 25, //2^80=1208925819614629174706176
938 25, //2^81=2417851639229258349412352
939 25, //2^82=4835703278458516698824704
940 25, //2^83=9671406556917033397649408
941 26, //2^84=19342813113834066795298816
942 26, //2^85=38685626227668133590597632
943 26, //2^86=77371252455336267181195264
944 27, //2^87=154742504910672534362390528
945 27, //2^88=309485009821345068724781056
946 27, //2^89=618970019642690137449562112
947 28, //2^90=1237940039285380274899124224
948 28, //2^91=2475880078570760549798248448
949 28, //2^92=4951760157141521099596496896
950 28, //2^93=9903520314283042199192993792
951 29, //2^94=19807040628566084398385987584
952 29, //2^95=39614081257132168796771975168
953 29, //2^96=79228162514264337593543950336
955 30, //2^97=158456325028528675187087900672
956 30, //2^98=316912650057057350374175801344
957 30, //2^99=633825300114114700748351602688
958 31, //2^100=1267650600228229401496703205376
959 31, //2^101=2535301200456458802993406410752
960 31, //2^102=5070602400912917605986812821504
961 32, //2^103=10141204801825835211973625643008
962 32, //2^104=20282409603651670423947251286016
963 32, //2^105=40564819207303340847894502572032
964 32, //2^106=81129638414606681695789005144064
965 33, //2^107=162259276829213363391578010288128
990 UINT128 power10_table_128
[] = {
991 {{0x0000000000000001ull
, 0x0000000000000000ull
}}, // 10^0
992 {{0x000000000000000aull
, 0x0000000000000000ull
}}, // 10^1
993 {{0x0000000000000064ull
, 0x0000000000000000ull
}}, // 10^2
994 {{0x00000000000003e8ull
, 0x0000000000000000ull
}}, // 10^3
995 {{0x0000000000002710ull
, 0x0000000000000000ull
}}, // 10^4
996 {{0x00000000000186a0ull
, 0x0000000000000000ull
}}, // 10^5
997 {{0x00000000000f4240ull
, 0x0000000000000000ull
}}, // 10^6
998 {{0x0000000000989680ull
, 0x0000000000000000ull
}}, // 10^7
999 {{0x0000000005f5e100ull
, 0x0000000000000000ull
}}, // 10^8
1000 {{0x000000003b9aca00ull
, 0x0000000000000000ull
}}, // 10^9
1001 {{0x00000002540be400ull
, 0x0000000000000000ull
}}, // 10^10
1002 {{0x000000174876e800ull
, 0x0000000000000000ull
}}, // 10^11
1003 {{0x000000e8d4a51000ull
, 0x0000000000000000ull
}}, // 10^12
1004 {{0x000009184e72a000ull
, 0x0000000000000000ull
}}, // 10^13
1005 {{0x00005af3107a4000ull
, 0x0000000000000000ull
}}, // 10^14
1006 {{0x00038d7ea4c68000ull
, 0x0000000000000000ull
}}, // 10^15
1007 {{0x002386f26fc10000ull
, 0x0000000000000000ull
}}, // 10^16
1008 {{0x016345785d8a0000ull
, 0x0000000000000000ull
}}, // 10^17
1009 {{0x0de0b6b3a7640000ull
, 0x0000000000000000ull
}}, // 10^18
1010 {{0x8ac7230489e80000ull
, 0x0000000000000000ull
}}, // 10^19
1011 {{0x6bc75e2d63100000ull
, 0x0000000000000005ull
}}, // 10^20
1012 {{0x35c9adc5dea00000ull
, 0x0000000000000036ull
}}, // 10^21
1013 {{0x19e0c9bab2400000ull
, 0x000000000000021eull
}}, // 10^22
1014 {{0x02c7e14af6800000ull
, 0x000000000000152dull
}}, // 10^23
1015 {{0x1bcecceda1000000ull
, 0x000000000000d3c2ull
}}, // 10^24
1016 {{0x161401484a000000ull
, 0x0000000000084595ull
}}, // 10^25
1017 {{0xdcc80cd2e4000000ull
, 0x000000000052b7d2ull
}}, // 10^26
1018 {{0x9fd0803ce8000000ull
, 0x00000000033b2e3cull
}}, // 10^27
1019 {{0x3e25026110000000ull
, 0x00000000204fce5eull
}}, // 10^28
1020 {{0x6d7217caa0000000ull
, 0x00000001431e0faeull
}}, // 10^29
1021 {{0x4674edea40000000ull
, 0x0000000c9f2c9cd0ull
}}, // 10^30
1022 {{0xc0914b2680000000ull
, 0x0000007e37be2022ull
}}, // 10^31
1023 {{0x85acef8100000000ull
, 0x000004ee2d6d415bull
}}, // 10^32
1024 {{0x38c15b0a00000000ull
, 0x0000314dc6448d93ull
}}, // 10^33
1025 {{0x378d8e6400000000ull
, 0x0001ed09bead87c0ull
}}, // 10^34
1026 {{0x2b878fe800000000ull
, 0x0013426172c74d82ull
}}, // 10^35
1027 {{0xb34b9f1000000000ull
, 0x00c097ce7bc90715ull
}}, // 10^36
1028 {{0x00f436a000000000ull
, 0x0785ee10d5da46d9ull
}}, // 10^37
1029 {{0x098a224000000000ull
, 0x4b3b4ca85a86c47aull
}}, // 10^38
1033 int estimate_bin_expon
[] = {
1054 UINT64 power10_index_binexp
[] = {
1055 0x000000000000000aull
,
1056 0x000000000000000aull
,
1057 0x000000000000000aull
,
1058 0x000000000000000aull
,
1059 0x0000000000000064ull
,
1060 0x0000000000000064ull
,
1061 0x0000000000000064ull
,
1062 0x00000000000003e8ull
,
1063 0x00000000000003e8ull
,
1064 0x00000000000003e8ull
,
1065 0x0000000000002710ull
,
1066 0x0000000000002710ull
,
1067 0x0000000000002710ull
,
1068 0x0000000000002710ull
,
1069 0x00000000000186a0ull
,
1070 0x00000000000186a0ull
,
1071 0x00000000000186a0ull
,
1072 0x00000000000f4240ull
,
1073 0x00000000000f4240ull
,
1074 0x00000000000f4240ull
,
1075 0x0000000000989680ull
,
1076 0x0000000000989680ull
,
1077 0x0000000000989680ull
,
1078 0x0000000000989680ull
,
1079 0x0000000005f5e100ull
,
1080 0x0000000005f5e100ull
,
1081 0x0000000005f5e100ull
,
1082 0x000000003b9aca00ull
,
1083 0x000000003b9aca00ull
,
1084 0x000000003b9aca00ull
,
1085 0x00000002540be400ull
,
1086 0x00000002540be400ull
,
1087 0x00000002540be400ull
,
1088 0x00000002540be400ull
,
1089 0x000000174876e800ull
,
1090 0x000000174876e800ull
,
1091 0x000000174876e800ull
,
1092 0x000000e8d4a51000ull
,
1093 0x000000e8d4a51000ull
,
1094 0x000000e8d4a51000ull
,
1095 0x000009184e72a000ull
,
1096 0x000009184e72a000ull
,
1097 0x000009184e72a000ull
,
1098 0x000009184e72a000ull
,
1099 0x00005af3107a4000ull
,
1100 0x00005af3107a4000ull
,
1101 0x00005af3107a4000ull
,
1102 0x00038d7ea4c68000ull
,
1103 0x00038d7ea4c68000ull
,
1104 0x00038d7ea4c68000ull
,
1105 0x002386f26fc10000ull
,
1106 0x002386f26fc10000ull
,
1107 0x002386f26fc10000ull
,
1108 0x002386f26fc10000ull
,
1109 0x016345785d8a0000ull
,
1110 0x016345785d8a0000ull
,
1111 0x016345785d8a0000ull
,
1112 0x0de0b6b3a7640000ull
,
1113 0x0de0b6b3a7640000ull
,
1114 0x0de0b6b3a7640000ull
,
1115 0x8ac7230489e80000ull
,
1116 0x8ac7230489e80000ull
,
1117 0x8ac7230489e80000ull
,
1118 0x8ac7230489e80000ull
1122 int short_recip_scale
[] = {
1139 115 - 64, //114 - 64
1144 UINT64 reciprocals10_64
[] = {
1145 1ull, // dummy value for 0 extra digits
1146 0x3333333333333334ull
, // 1 extra digit
1147 0x51eb851eb851eb86ull
,
1148 0x20c49ba5e353f7cfull
,
1149 0x346dc5d63886594bull
,
1150 0x29f16b11c6d1e109ull
,
1151 0x218def416bdb1a6eull
,
1152 0x35afe535795e90b0ull
,
1153 0x2af31dc4611873c0ull
,
1154 0x225c17d04dad2966ull
,
1155 0x36f9bfb3af7b7570ull
,
1156 0x2bfaffc2f2c92ac0ull
,
1157 0x232f33025bd42233ull
,
1158 0x384b84d092ed0385ull
,
1159 0x2d09370d42573604ull
,
1160 0x24075f3dceac2b37ull
,
1161 0x39a5652fb1137857ull
,
1162 0x2e1dea8c8da92d13ull
1167 UINT128 power10_index_binexp_128
[] = {
1168 {{0x000000000000000aull
, 0x0000000000000000ull
}},
1169 {{0x000000000000000aull
, 0x0000000000000000ull
}},
1170 {{0x000000000000000aull
, 0x0000000000000000ull
}},
1171 {{0x000000000000000aull
, 0x0000000000000000ull
}},
1172 {{0x0000000000000064ull
, 0x0000000000000000ull
}},
1173 {{0x0000000000000064ull
, 0x0000000000000000ull
}},
1174 {{0x0000000000000064ull
, 0x0000000000000000ull
}},
1175 {{0x00000000000003e8ull
, 0x0000000000000000ull
}},
1176 {{0x00000000000003e8ull
, 0x0000000000000000ull
}},
1177 {{0x00000000000003e8ull
, 0x0000000000000000ull
}},
1178 {{0x0000000000002710ull
, 0x0000000000000000ull
}},
1179 {{0x0000000000002710ull
, 0x0000000000000000ull
}},
1180 {{0x0000000000002710ull
, 0x0000000000000000ull
}},
1181 {{0x0000000000002710ull
, 0x0000000000000000ull
}},
1182 {{0x00000000000186a0ull
, 0x0000000000000000ull
}},
1183 {{0x00000000000186a0ull
, 0x0000000000000000ull
}},
1184 {{0x00000000000186a0ull
, 0x0000000000000000ull
}},
1185 {{0x00000000000f4240ull
, 0x0000000000000000ull
}},
1186 {{0x00000000000f4240ull
, 0x0000000000000000ull
}},
1187 {{0x00000000000f4240ull
, 0x0000000000000000ull
}},
1188 {{0x0000000000989680ull
, 0x0000000000000000ull
}},
1189 {{0x0000000000989680ull
, 0x0000000000000000ull
}},
1190 {{0x0000000000989680ull
, 0x0000000000000000ull
}},
1191 {{0x0000000000989680ull
, 0x0000000000000000ull
}},
1192 {{0x0000000005f5e100ull
, 0x0000000000000000ull
}},
1193 {{0x0000000005f5e100ull
, 0x0000000000000000ull
}},
1194 {{0x0000000005f5e100ull
, 0x0000000000000000ull
}},
1195 {{0x000000003b9aca00ull
, 0x0000000000000000ull
}},
1196 {{0x000000003b9aca00ull
, 0x0000000000000000ull
}},
1197 {{0x000000003b9aca00ull
, 0x0000000000000000ull
}},
1198 {{0x00000002540be400ull
, 0x0000000000000000ull
}},
1199 {{0x00000002540be400ull
, 0x0000000000000000ull
}},
1200 {{0x00000002540be400ull
, 0x0000000000000000ull
}},
1201 {{0x00000002540be400ull
, 0x0000000000000000ull
}},
1202 {{0x000000174876e800ull
, 0x0000000000000000ull
}},
1203 {{0x000000174876e800ull
, 0x0000000000000000ull
}},
1204 {{0x000000174876e800ull
, 0x0000000000000000ull
}},
1205 {{0x000000e8d4a51000ull
, 0x0000000000000000ull
}},
1206 {{0x000000e8d4a51000ull
, 0x0000000000000000ull
}},
1207 {{0x000000e8d4a51000ull
, 0x0000000000000000ull
}},
1208 {{0x000009184e72a000ull
, 0x0000000000000000ull
}},
1209 {{0x000009184e72a000ull
, 0x0000000000000000ull
}},
1210 {{0x000009184e72a000ull
, 0x0000000000000000ull
}},
1211 {{0x000009184e72a000ull
, 0x0000000000000000ull
}},
1212 {{0x00005af3107a4000ull
, 0x0000000000000000ull
}},
1213 {{0x00005af3107a4000ull
, 0x0000000000000000ull
}},
1214 {{0x00005af3107a4000ull
, 0x0000000000000000ull
}},
1215 {{0x00038d7ea4c68000ull
, 0x0000000000000000ull
}},
1216 {{0x00038d7ea4c68000ull
, 0x0000000000000000ull
}},
1217 {{0x00038d7ea4c68000ull
, 0x0000000000000000ull
}},
1218 {{0x002386f26fc10000ull
, 0x0000000000000000ull
}},
1219 {{0x002386f26fc10000ull
, 0x0000000000000000ull
}},
1220 {{0x002386f26fc10000ull
, 0x0000000000000000ull
}},
1221 {{0x002386f26fc10000ull
, 0x0000000000000000ull
}},
1222 {{0x016345785d8a0000ull
, 0x0000000000000000ull
}},
1223 {{0x016345785d8a0000ull
, 0x0000000000000000ull
}},
1224 {{0x016345785d8a0000ull
, 0x0000000000000000ull
}},
1225 {{0x0de0b6b3a7640000ull
, 0x0000000000000000ull
}},
1226 {{0x0de0b6b3a7640000ull
, 0x0000000000000000ull
}},
1227 {{0x0de0b6b3a7640000ull
, 0x0000000000000000ull
}},
1228 {{0x8ac7230489e80000ull
, 0x0000000000000000ull
}},
1229 {{0x8ac7230489e80000ull
, 0x0000000000000000ull
}},
1230 {{0x8ac7230489e80000ull
, 0x0000000000000000ull
}},
1231 {{0x8ac7230489e80000ull
, 0x0000000000000000ull
}},
1232 {{0x6bc75e2d63100000ull
, 0x0000000000000005ull
}}, // 10^20
1233 {{0x6bc75e2d63100000ull
, 0x0000000000000005ull
}}, // 10^20
1234 {{0x6bc75e2d63100000ull
, 0x0000000000000005ull
}}, // 10^20
1235 {{0x35c9adc5dea00000ull
, 0x0000000000000036ull
}}, // 10^21
1236 {{0x35c9adc5dea00000ull
, 0x0000000000000036ull
}}, // 10^21
1237 {{0x35c9adc5dea00000ull
, 0x0000000000000036ull
}}, // 10^21
1238 {{0x19e0c9bab2400000ull
, 0x000000000000021eull
}}, // 10^22
1239 {{0x19e0c9bab2400000ull
, 0x000000000000021eull
}}, // 10^22
1240 {{0x19e0c9bab2400000ull
, 0x000000000000021eull
}}, // 10^22
1241 {{0x19e0c9bab2400000ull
, 0x000000000000021eull
}}, // 10^22
1242 {{0x02c7e14af6800000ull
, 0x000000000000152dull
}}, // 10^23
1243 {{0x02c7e14af6800000ull
, 0x000000000000152dull
}}, // 10^23
1244 {{0x02c7e14af6800000ull
, 0x000000000000152dull
}}, // 10^23
1245 {{0x1bcecceda1000000ull
, 0x000000000000d3c2ull
}}, // 10^24
1246 {{0x1bcecceda1000000ull
, 0x000000000000d3c2ull
}}, // 10^24
1247 {{0x1bcecceda1000000ull
, 0x000000000000d3c2ull
}}, // 10^24
1248 {{0x161401484a000000ull
, 0x0000000000084595ull
}}, // 10^25
1249 {{0x161401484a000000ull
, 0x0000000000084595ull
}}, // 10^25
1250 {{0x161401484a000000ull
, 0x0000000000084595ull
}}, // 10^25
1251 {{0x161401484a000000ull
, 0x0000000000084595ull
}}, // 10^25
1252 {{0xdcc80cd2e4000000ull
, 0x000000000052b7d2ull
}}, // 10^26
1253 {{0xdcc80cd2e4000000ull
, 0x000000000052b7d2ull
}}, // 10^26
1254 {{0xdcc80cd2e4000000ull
, 0x000000000052b7d2ull
}}, // 10^26
1255 {{0x9fd0803ce8000000ull
, 0x00000000033b2e3cull
}}, // 10^27
1256 {{0x9fd0803ce8000000ull
, 0x00000000033b2e3cull
}}, // 10^27
1257 {{0x9fd0803ce8000000ull
, 0x00000000033b2e3cull
}}, // 10^27
1258 {{0x3e25026110000000ull
, 0x00000000204fce5eull
}}, // 10^28
1259 {{0x3e25026110000000ull
, 0x00000000204fce5eull
}}, // 10^28
1260 {{0x3e25026110000000ull
, 0x00000000204fce5eull
}}, // 10^28
1261 {{0x3e25026110000000ull
, 0x00000000204fce5eull
}}, // 10^28
1262 {{0x6d7217caa0000000ull
, 0x00000001431e0faeull
}}, // 10^29
1263 {{0x6d7217caa0000000ull
, 0x00000001431e0faeull
}}, // 10^29
1264 {{0x6d7217caa0000000ull
, 0x00000001431e0faeull
}}, // 10^29
1265 {{0x4674edea40000000ull
, 0x0000000c9f2c9cd0ull
}}, // 10^30
1266 {{0x4674edea40000000ull
, 0x0000000c9f2c9cd0ull
}}, // 10^30
1267 {{0x4674edea40000000ull
, 0x0000000c9f2c9cd0ull
}}, // 10^30
1268 {{0xc0914b2680000000ull
, 0x0000007e37be2022ull
}}, // 10^31
1269 {{0xc0914b2680000000ull
, 0x0000007e37be2022ull
}}, // 10^31
1270 {{0xc0914b2680000000ull
, 0x0000007e37be2022ull
}}, // 10^31
1271 {{0x85acef8100000000ull
, 0x000004ee2d6d415bull
}}, // 10^32
1272 {{0x85acef8100000000ull
, 0x000004ee2d6d415bull
}}, // 10^32
1273 {{0x85acef8100000000ull
, 0x000004ee2d6d415bull
}}, // 10^32
1274 {{0x85acef8100000000ull
, 0x000004ee2d6d415bull
}}, // 10^32
1275 {{0x38c15b0a00000000ull
, 0x0000314dc6448d93ull
}}, // 10^33
1276 {{0x38c15b0a00000000ull
, 0x0000314dc6448d93ull
}}, // 10^33
1277 {{0x38c15b0a00000000ull
, 0x0000314dc6448d93ull
}}, // 10^33, entry 112
1278 {{0x378d8e6400000000ull
, 0x0001ed09bead87c0ull
}}, // 10^34
1279 {{0x378d8e6400000000ull
, 0x0001ed09bead87c0ull
}}, // 10^34
1280 {{0x378d8e6400000000ull
, 0x0001ed09bead87c0ull
}}, // 10^34
1281 {{0x2b878fe800000000ull
, 0x0013426172c74d82ull
}}, // 10^35
1282 {{0x2b878fe800000000ull
, 0x0013426172c74d82ull
}}, // 10^35
1283 {{0x2b878fe800000000ull
, 0x0013426172c74d82ull
}}, // 10^35
1284 {{0x2b878fe800000000ull
, 0x0013426172c74d82ull
}}, // 10^35
1285 {{0xb34b9f1000000000ull
, 0x00c097ce7bc90715ull
}}, // 10^36
1286 {{0x00f436a000000000ull
, 0x0785ee10d5da46d9ull
}}, // 10^37
1287 {{0x00f436a000000000ull
, 0x0785ee10d5da46d9ull
}}, // 10^37
1288 {{0x00f436a000000000ull
, 0x0785ee10d5da46d9ull
}}, // 10^37
1289 {{0x098a224000000000ull
, 0x4b3b4ca85a86c47aull
}}, // 10^38
1290 {{0x098a224000000000ull
, 0x4b3b4ca85a86c47aull
}}, // 10^38
1291 {{0x098a224000000000ull
, 0x4b3b4ca85a86c47aull
}}, // 10^38
1292 {{0x098a224000000000ull
, 0x4b3b4ca85a86c47aull
}}, // 10^38