17static Fp powers_ten[] = {
18 { 18054884314459144840U, -1220 },
19 { 13451937075301367670U, -1193 },
20 { 10022474136428063862U, -1166 },
21 { 14934650266808366570U, -1140 },
22 { 11127181549972568877U, -1113 },
23 { 16580792590934885855U, -1087 },
24 { 12353653155963782858U, -1060 },
25 { 18408377700990114895U, -1034 },
26 { 13715310171984221708U, -1007 },
27 { 10218702384817765436U, -980 },
28 { 15227053142812498563U, -954 },
29 { 11345038669416679861U, -927 },
30 { 16905424996341287883U, -901 },
31 { 12595523146049147757U, -874 },
32 { 9384396036005875287U, -847 },
33 { 13983839803942852151U, -821 },
34 { 10418772551374772303U, -794 },
35 { 15525180923007089351U, -768 },
36 { 11567161174868858868U, -741 },
37 { 17236413322193710309U, -715 },
38 { 12842128665889583758U, -688 },
39 { 9568131466127621947U, -661 },
40 { 14257626930069360058U, -635 },
41 { 10622759856335341974U, -608 },
42 { 15829145694278690180U, -582 },
43 { 11793632577567316726U, -555 },
44 { 17573882009934360870U, -529 },
45 { 13093562431584567480U, -502 },
46 { 9755464219737475723U, -475 },
47 { 14536774485912137811U, -449 },
48 { 10830740992659433045U, -422 },
49 { 16139061738043178685U, -396 },
50 { 12024538023802026127U, -369 },
51 { 17917957937422433684U, -343 },
52 { 13349918974505688015U, -316 },
53 { 9946464728195732843U, -289 },
54 { 14821387422376473014U, -263 },
55 { 11042794154864902060U, -236 },
56 { 16455045573212060422U, -210 },
57 { 12259964326927110867U, -183 },
58 { 18268770466636286478U, -157 },
59 { 13611294676837538539U, -130 },
60 { 10141204801825835212U, -103 },
61 { 15111572745182864684U, -77 },
62 { 11258999068426240000U, -50 },
63 { 16777216000000000000U, -24 },
64 { 12500000000000000000U, 3 },
65 { 9313225746154785156U, 30 },
66 { 13877787807814456755U, 56 },
67 { 10339757656912845936U, 83 },
68 { 15407439555097886824U, 109 },
69 { 11479437019748901445U, 136 },
70 { 17105694144590052135U, 162 },
71 { 12744735289059618216U, 189 },
72 { 9495567745759798747U, 216 },
73 { 14149498560666738074U, 242 },
74 { 10542197943230523224U, 269 },
75 { 15709099088952724970U, 295 },
76 { 11704190886730495818U, 322 },
77 { 17440603504673385349U, 348 },
78 { 12994262207056124023U, 375 },
79 { 9681479787123295682U, 402 },
80 { 14426529090290212157U, 428 },
81 { 10748601772107342003U, 455 },
82 { 16016664761464807395U, 481 },
83 { 11933345169920330789U, 508 },
84 { 17782069995880619868U, 534 },
85 { 13248674568444952270U, 561 },
86 { 9871031767461413346U, 588 },
87 { 14708983551653345445U, 614 },
88 { 10959046745042015199U, 641 },
89 { 16330252207878254650U, 667 },
90 { 12166986024289022870U, 694 },
91 { 18130221999122236476U, 720 },
92 { 13508068024458167312U, 747 },
93 { 10064294952495520794U, 774 },
94 { 14996968138956309548U, 800 },
95 { 11173611982879273257U, 827 },
96 { 16649979327439178909U, 853 },
97 { 12405201291620119593U, 880 },
98 { 9242595204427927429U, 907 },
99 { 13772540099066387757U, 933 },
100 { 10261342003245940623U, 960 },
101 { 15290591125556738113U, 986 },
102 { 11392378155556871081U, 1013 },
103 { 16975966327722178521U, 1039 },
104 { 12648080533535911531U, 1066 }
107_meta_inline
static Fp find_cachedpow10(int32 exp, int32* k)
109 const float64 one_log_ten = 0.30102999566398114;
111 int32 approx = (int32)(-(exp + npowers) * one_log_ten);
112 int32 idx = (approx - firstpower) / steppowers;
115 int32 current = exp + powers_ten[idx].exp + 64;
117 if (current < expmin) {
122 if (current > expmax) {
127 *k = (firstpower + idx * steppowers);
129 return powers_ten[idx];