1 //! Cached exponents for basen values with 160-bit extended floats.
2 //!
3 //! Exact versions of base**n as an extended-precision float, with both
4 //! large and small powers. Use the large powers to minimize the amount
5 //! of compounded error.
6 //!
7 //! These values were calculated using Python, using the arbitrary-precision
8 //! integer to calculate exact extended-representation of each value.
9 //! These values are all normalized.
10 //!
11 //! This files takes ~ 44KB of storage.
12 //!
13 //! This file is mostly automatically generated, do not change values
14 //! manually, unless you know what you are doing. The script to generate
15 //! the values is as follows:
16 //!
17 //! ```text
18 //! import math
19 //! from collections import deque
20 //!
21 //! STEP_STR = "const BASE{0}_STEP: i32 = {1};"
22 //! SMALL_MANTISSA_STR = "const BASE{0}_SMALL_MANTISSA: [u128; {1}] = ["
23 //! SMALL_EXPONENT_STR = "const BASE{0}_SMALL_EXPONENT: [i32; {1}] = ["
24 //! LARGE_MANTISSA_STR = "const BASE{0}_LARGE_MANTISSA: [u128; {1}] = ["
25 //! LARGE_EXPONENT_STR = "const BASE{0}_LARGE_EXPONENT: [i32; {1}] = ["
26 //! SMALL_INT_STR = "const BASE{0}_SMALL_INT_POWERS: [u128; {1}] = {2};"
27 //! BIAS_STR = "const BASE{0}_BIAS: i32 = {1};"
28 //! EXP_STR = "// {}^{}"
29 //! POWER_STR = """pub(crate) const BASE{0}_POWERS: ModeratePathPowers<u128> = ModeratePathPowers {{
30 //!     small: ExtendedFloatArray {{ mant: &BASE{0}_SMALL_MANTISSA, exp: &BASE{0}_SMALL_EXPONENT }},
31 //!     large: ExtendedFloatArray {{ mant: &BASE{0}_LARGE_MANTISSA, exp: &BASE{0}_LARGE_EXPONENT }},
32 //!     small_int: &BASE{0}_SMALL_INT_POWERS,
33 //!     step: BASE{0}_STEP,
34 //!     bias: BASE{0}_BIAS,
35 //! }};\n"""
36 //!
37 //! def calculate_bitshift(base, exponent):
38 //!     '''
39 //!     Calculate the bitshift required for a given base. The exponent
40 //!     is the absolute value of the max exponent (log distance from 1.)
41 //!     '''
42 //!
43 //!     return 127 + math.ceil(math.log2(base**exponent))
44 //!
45 //!
46 //! def next_fp(fp, base, step = 1):
47 //!     '''Generate the next extended-floating point value.'''
48 //!
49 //!     return (fp[0] * (base**step), fp[1])
50 //!
51 //!
52 //! def prev_fp(fp, base, step = 1):
53 //!     '''Generate the previous extended-floating point value.'''
54 //!
55 //!     return (fp[0] // (base**step), fp[1])
56 //!
57 //!
58 //! def normalize_fp(fp):
59 //!     '''Normalize a extended-float so the MSB is the 128th bit'''
60 //!
61 //!     while fp[0] >> 128 != 0:
62 //!         fp = (fp[0] >> 1, fp[1] + 1)
63 //!     return fp
64 //!
65 //!
66 //! def generate_small(base, count):
67 //!     '''Generate the small powers for a given base'''
68 //!
69 //!     bitshift = calculate_bitshift(base, count)
70 //!     fps = []
71 //!     fp = (1 << bitshift, -bitshift)
72 //!     for exp in range(count):
73 //!         fps.append((normalize_fp(fp), exp))
74 //!         fp = next_fp(fp, base)
75 //!
76 //!     # Print the small powers as integers.
77 //!     ints = [base**i for _, i in fps]
78 //!
79 //!     return fps, ints
80 //!
81 //!
82 //! def generate_large(base, step):
83 //!     '''Generate the large powers for a given base.'''
84 //!
85 //!     # Get our starting parameters
86 //!     min_exp = math.floor(math.log(5e-324, base) - math.log(0xFFFFFFFFFFFFFFFF, base))
87 //!     max_exp = math.ceil(math.log(1.7976931348623157e+308, base))
88 //!     bitshift = calculate_bitshift(base, abs(min_exp - step))
89 //!     fps = deque()
90 //!
91 //!     # Add negative exponents
92 //!     # We need to go below the minimum exponent, since we need
93 //!     # all resulting exponents to be positive.
94 //!     fp = (1 << bitshift, -bitshift)
95 //!     for exp in range(-step, min_exp-step, -step):
96 //!         fp = prev_fp(fp, base, step)
97 //!         fps.appendleft((normalize_fp(fp), exp))
98 //!
99 //!     # Add positive exponents
100 //!     fp = (1 << bitshift, -bitshift)
101 //!     fps.append((normalize_fp(fp), 0))
102 //!     for exp in range(step, max_exp, step):
103 //!         fp = next_fp(fp, base, step)
104 //!         fps.append((normalize_fp(fp), exp))
105 //!
106 //!     # Return the smallest exp, AKA, the bias
107 //!     return fps, -fps[0][1]
108 //!
109 //!
110 //! def print_array(base, string, fps, index):
111 //!     '''Print an entire array'''
112 //!
113 //!     print(string.format(base, len(fps)))
114 //!     for fp, exp in fps:
115 //!         value = "    {},".format(fp[index])
116 //!         exp = EXP_STR.format(base, exp)
117 //!         print(value.ljust(56, " ") + exp)
118 //!     print("];")
119 //!
120 //!
121 //! def generate_base(base):
122 //!     '''Generate all powers and variables.'''
123 //!
124 //!     step = math.floor(math.log(1e10, base))
125 //!     small, ints = generate_small(base, step)
126 //!     large, bias = generate_large(base, step)
127 //!
128 //!     print_array(base, SMALL_MANTISSA_STR, small, 0)
129 //!     print_array(base, SMALL_EXPONENT_STR, small, 1)
130 //!     print_array(base, LARGE_MANTISSA_STR, large, 0)
131 //!     print_array(base, LARGE_EXPONENT_STR, large, 1)
132 //!     print(SMALL_INT_STR.format(base, len(ints), ints))
133 //!     print(STEP_STR.format(base, step))
134 //!     print(BIAS_STR.format(base, bias))
135 //!
136 //!
137 //! def generate():
138 //!     '''Generate all bases.'''
139 //!
140 //!     bases = [
141 //!         3, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, 17, 18, 19, 20, 21,
142 //!         22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 33, 34, 35, 36
143 //!     ]
144 //!
145 //!     for base in bases:
146 //!         print("// BASE{}\n".format(base))
147 //!         generate_base(base)
148 //!         print("")
149 //!
150 //!     print("// HIGH LEVEL\n// ----------\n")
151 //!
152 //!     for base in bases:
153 //!         print(POWER_STR.format(base))
154 //!
155 //!
156 //! if __name__ == '__main__':
157 //!     generate()
158 //! ```
159 
160 use crate::util::*;
161 use super::cached::{ExtendedFloatArray, ModeratePathPowers};
162 
163 // LOW-LEVEL
164 // ---------
165 
166 // BASE10
167 
168 const BASE10_SMALL_MANTISSA: [u128; 10] = [
169     170141183460469231731687303715884105728,            // 10^0
170     212676479325586539664609129644855132160,            // 10^1
171     265845599156983174580761412056068915200,            // 10^2
172     332306998946228968225951765070086144000,            // 10^3
173     207691874341393105141219853168803840000,            // 10^4
174     259614842926741381426524816461004800000,            // 10^5
175     324518553658426726783156020576256000000,            // 10^6
176     202824096036516704239472512860160000000,            // 10^7
177     253530120045645880299340641075200000000,            // 10^8
178     316912650057057350374175801344000000000,            // 10^9
179 ];
180 const BASE10_SMALL_EXPONENT: [i32; 10] = [
181     -127,                                               // 10^0
182     -124,                                               // 10^1
183     -121,                                               // 10^2
184     -118,                                               // 10^3
185     -114,                                               // 10^4
186     -111,                                               // 10^5
187     -108,                                               // 10^6
188     -104,                                               // 10^7
189     -101,                                               // 10^8
190     -98,                                                // 10^9
191 ];
192 const BASE10_LARGE_MANTISSA: [u128; 66] = [
193     213154451346726893197828921904416471830,            // 10^-350
194     248144440523729302452212341484167231049,            // 10^-340
195     288878149031346317441449898160257412877,            // 10^-330
196     336298426882534191759128470626028036788,            // 10^-320
197     195751447977110622310503659901458325789,            // 10^-310
198     227884678143438210606695688214919443462,            // 10^-300
199     265292681454958173686982700851419292695,            // 10^-290
200     308841328899094571460716776609676066664,            // 10^-280
201     179769313486231590772930519078902473361,            // 10^-270
202     209279024841067836122739267394531603625,            // 10^-260
203     243632850284999977008834559696879707771,            // 10^-250
204     283625966735416996535885333662014114404,            // 10^-240
205     330184081959790778970212365572822879074,            // 10^-230
206     192192430817400325887261637005036975649,            // 10^-220
207     223741436863085634409521749481834675708,            // 10^-210
208     260469313784369307581244210575049132700,            // 10^-200
209     303226189902482213896285056340332530323,            // 10^-190
210     176500872419263593559319302637789241459,            // 10^-180
211     205474058654233340126601167300005025998,            // 10^-170
212     239203286653190548679094257880939433814,            // 10^-160
213     278469275977917188637766821636980671685,            // 10^-150
214     324180903818827574883781864350871964922,            // 10^-140
215     188698121241077067612077729049413444545,            // 10^-130
216     219673525124179510879420825570604582952,            // 10^-120
217     255733641241886083594780445064656183766,            // 10^-110
218     297713141471480582369003031710926657271,            // 10^-100
219     173291855882550928723650886508942731464,            // 10^-90
220     201738271725539733566868685312735302682,            // 10^-80
221     234854258277383322788948059678933702737,            // 10^-70
222     273406340597876490546562778389702670669,            // 10^-60
223     318286871302263450979444638813965337664,            // 10^-50
224     185267342779705912677713576013900652565,            // 10^-40
225     215679573337205118357336120696157045389,            // 10^-30
226     251084069415467230553431576928306656644,            // 10^-20
227     292300327466180583640736966543256603931,            // 10^-10
228     170141183460469231731687303715884105728,            // 10^0
229     198070406285660843983859875840000000000,            // 10^10
230     230584300921369395200000000000000000000,            // 10^20
231     268435456000000000000000000000000000000,            // 10^30
232     312500000000000000000000000000000000000,            // 10^40
233     181898940354585647583007812500000000000,            // 10^50
234     211758236813575084767080625169910490512,            // 10^60
235     246519032881566189191165176650870696772,            // 10^70
236     286985925493722536125179818657774823686,            // 10^80
237     334095588761524455767567058393935234851,            // 10^90
238     194469227433160678348252001680628882518,            // 10^100
239     226391976970667809187727982272194794517,            // 10^110
240     263554948580763080608714351281750475192,            // 10^120
241     306818341581107909568485747186642227685,            // 10^130
242     178591779887855465971216179422709524914,            // 10^140
243     207908195312897984370608091613638127355,            // 10^150
244     242036994678082392051126914580396990473,            // 10^160
245     281768146294730706199918541335962934504,            // 10^170
246     328021294314799255458543241647960309061,            // 10^180
247     190933522718725292628248712075851106236,            // 10^190
248     222275874948507748344271341427056009691,            // 10^200
249     258763175164940474024358370140027266101,            // 10^210
250     301239983137860514717593754339063617053,            // 10^220
251     175344747920672243180215448571289666610,            // 10^230
252     204128152598478183127259193653345185577,            // 10^240
253     237636445786894977939384050729387888658,            // 10^250
254     276645233140903266541874095249674153349,            // 10^260
255     322057438479856665411351825168442625260,            // 10^270
256     187462101736953869352205554703508169192,            // 10^280
257     218234609040610805796698614376955862613,            // 10^290
258     254058522452380049271391022923583936195,            // 10^300
259 ];
260 const BASE10_LARGE_EXPONENT: [i32; 66] = [
261     -1290,                                              // 10^-350
262     -1257,                                              // 10^-340
263     -1224,                                              // 10^-330
264     -1191,                                              // 10^-320
265     -1157,                                              // 10^-310
266     -1124,                                              // 10^-300
267     -1091,                                              // 10^-290
268     -1058,                                              // 10^-280
269     -1024,                                              // 10^-270
270     -991,                                               // 10^-260
271     -958,                                               // 10^-250
272     -925,                                               // 10^-240
273     -892,                                               // 10^-230
274     -858,                                               // 10^-220
275     -825,                                               // 10^-210
276     -792,                                               // 10^-200
277     -759,                                               // 10^-190
278     -725,                                               // 10^-180
279     -692,                                               // 10^-170
280     -659,                                               // 10^-160
281     -626,                                               // 10^-150
282     -593,                                               // 10^-140
283     -559,                                               // 10^-130
284     -526,                                               // 10^-120
285     -493,                                               // 10^-110
286     -460,                                               // 10^-100
287     -426,                                               // 10^-90
288     -393,                                               // 10^-80
289     -360,                                               // 10^-70
290     -327,                                               // 10^-60
291     -294,                                               // 10^-50
292     -260,                                               // 10^-40
293     -227,                                               // 10^-30
294     -194,                                               // 10^-20
295     -161,                                               // 10^-10
296     -127,                                               // 10^0
297     -94,                                                // 10^10
298     -61,                                                // 10^20
299     -28,                                                // 10^30
300     5,                                                  // 10^40
301     39,                                                 // 10^50
302     72,                                                 // 10^60
303     105,                                                // 10^70
304     138,                                                // 10^80
305     171,                                                // 10^90
306     205,                                                // 10^100
307     238,                                                // 10^110
308     271,                                                // 10^120
309     304,                                                // 10^130
310     338,                                                // 10^140
311     371,                                                // 10^150
312     404,                                                // 10^160
313     437,                                                // 10^170
314     470,                                                // 10^180
315     504,                                                // 10^190
316     537,                                                // 10^200
317     570,                                                // 10^210
318     603,                                                // 10^220
319     637,                                                // 10^230
320     670,                                                // 10^240
321     703,                                                // 10^250
322     736,                                                // 10^260
323     769,                                                // 10^270
324     803,                                                // 10^280
325     836,                                                // 10^290
326     869,                                                // 10^300
327 ];
328 const BASE10_SMALL_INT_POWERS: [u128; 10] = [1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000];
329 const BASE10_STEP: i32 = 10;
330 const BASE10_BIAS: i32 = 350;
331 
332 cfg_if! {
333 if #[cfg(feature = "radix")] {
334 // BASE3
335 
336 const BASE3_SMALL_MANTISSA: [u128; 20] = [
337     170141183460469231731687303715884105728,            // 3^0
338     255211775190703847597530955573826158592,            // 3^1
339     191408831393027885698148216680369618944,            // 3^2
340     287113247089541828547222325020554428416,            // 3^3
341     215334935317156371410416743765415821312,            // 3^4
342     323002402975734557115625115648123731968,            // 3^5
343     242251802231800917836718836736092798976,            // 3^6
344     181688851673850688377539127552069599232,            // 3^7
345     272533277510776032566308691328104398848,            // 3^8
346     204399958133082024424731518496078299136,            // 3^9
347     306599937199623036637097277744117448704,            // 3^10
348     229949952899717277477822958308088086528,            // 3^11
349     172462464674787958108367218731066064896,            // 3^12
350     258693697012181937162550828096599097344,            // 3^13
351     194020272759136452871913121072449323008,            // 3^14
352     291030409138704679307869681608673984512,            // 3^15
353     218272806854028509480902261206505488384,            // 3^16
354     327409210281042764221353391809758232576,            // 3^17
355     245556907710782073166015043857318674432,            // 3^18
356     184167680783086554874511282892989005824,            // 3^19
357 ];
358 const BASE3_SMALL_EXPONENT: [i32; 20] = [
359     -127,                                               // 3^0
360     -126,                                               // 3^1
361     -124,                                               // 3^2
362     -123,                                               // 3^3
363     -121,                                               // 3^4
364     -120,                                               // 3^5
365     -118,                                               // 3^6
366     -116,                                               // 3^7
367     -115,                                               // 3^8
368     -113,                                               // 3^9
369     -112,                                               // 3^10
370     -110,                                               // 3^11
371     -108,                                               // 3^12
372     -107,                                               // 3^13
373     -105,                                               // 3^14
374     -104,                                               // 3^15
375     -102,                                               // 3^16
376     -101,                                               // 3^17
377     -99,                                                // 3^18
378     -97,                                                // 3^19
379 ];
380 const BASE3_LARGE_MANTISSA: [u128; 69] = [
381     301829093537629265639465570217176944359,            // 3^-720
382     245033990385703656345786023933864839340,            // 3^-700
383     198926007233479871031630637668169238011,            // 3^-680
384     322988302900880006728964617948539328448,            // 3^-660
385     262211676747596696167096696967233799204,            // 3^-640
386     212871372756449173771443137071089544143,            // 3^-620
387     172815421118085121562612771428651141606,            // 3^-600
388     280593575260967566098415738074481154338,            // 3^-580
389     227794354139073103116567345878808448350,            // 3^-560
390     184930348919702200346046943747485274024,            // 3^-540
391     300264105147079021545114594266031000970,            // 3^-520
392     243763485459391712918376663011554847091,            // 3^-500
393     197894572893436379626501802082900685163,            // 3^-480
394     321313603691473325606249593990411338331,            // 3^-460
395     260852105259086286749566195634740776863,            // 3^-440
396     211767631486382365261996259087726574961,            // 3^-420
397     171919370559843833352674924374427532806,            // 3^-400
398     279138693352137745884317186629683060895,            // 3^-380
399     226613236986043931067161987739751269180,            // 3^-360
400     183971482278558945643179980616811190964,            // 3^-340
401     298707231244876640116631457791747347925,            // 3^-320
402     242499568120235502703106353919523432682,            // 3^-300
403     196868486555962367745019627988939060464,            // 3^-280
404     319647587822660709450189016904055940251,            // 3^-260
405     259499583169196479959998361450291137700,            // 3^-240
406     210669613131404954481085620515615417585,            // 3^-220
407     171027966037226738058674240289082148799,            // 3^-200
408     277691355027891684120101092281051616669,            // 3^-180
409     225438243943221318560556485110109738278,            // 3^-160
410     183017587375374702561553597022155160742,            // 3^-140
411     297158429757277967604640789526650060843,            // 3^-120
412     241242204211496523037749538228345943134,            // 3^-100
413     195847720491584060106836777189641681162,            // 3^-80
414     317990210271190550439415903835536554761,            // 3^-60
415     258154073926689380540223575440483383976,            // 3^-40
416     209577288018116110386327960504760073299,            // 3^-20
417     170141183460469231731687303715884105728,            // 3^0
418     276251521174629832311766924339483508736,            // 3^20
419     224269343257001716702690972139746492416,            // 3^40
420     182068638431613361423174859113151594496,            // 3^60
421     295617658828691846632166420412766595202,            // 3^80
422     239991359753539474232337032335634004651,            // 3^100
423     194832247114605420104007752175098574688,            // 3^120
424     316341426247257477645159711999449660471,            // 3^140
425     256815541169845811576524073480007610450,            // 3^160
426     208490626626972031635281014538153149532,            // 3^180
427     338517997729425004575949331160209430911,            // 3^200
428     274819152881557244028610584245948464515,            // 3^220
429     223106503338424488684979682521025988628,            // 3^240
430     181124609802400910077427551154104473922,            // 3^260
431     294084876820548989626661915132664622178,            // 3^280
432     238747000942913976797497733353022683918,            // 3^300
433     193822038982362660063056049982127016523,            // 3^320
434     314701191193291934781116205950433765545,            // 3^340
435     255483948725482657093998355855298189652,            // 3^360
436     207409599591488195571905341445445255582,            // 3^380
437     336762776818711782198286065086981891498,            // 3^400
438     273394211439632029990640781047045990695,            // 3^420
439     221949692762318233808346663450192754968,            // 3^440
440     180185475975832393914650652957737664335,            // 3^460
441     292560042310176717160312096633717510967,            // 3^480
442     237509094151441049982785534773499431992,            // 3^500
443     192817068794482616882547252154136283242,            // 3^520
444     313069460782756034010893203297842312622,            // 3^540
445     254159260607975299744356396919078736707,            // 3^560
446     206334177697445743564032291193028958152,            // 3^580
447     335016656754825225194410391893304442626,            // 3^600
448     271976658340519265432186039827268288213,            // 3^620
449     220798880266451537830039115389735391778,            // 3^640
450 ];
451 const BASE3_LARGE_EXPONENT: [i32; 69] = [
452     -1269,                                              // 3^-720
453     -1237,                                              // 3^-700
454     -1205,                                              // 3^-680
455     -1174,                                              // 3^-660
456     -1142,                                              // 3^-640
457     -1110,                                              // 3^-620
458     -1078,                                              // 3^-600
459     -1047,                                              // 3^-580
460     -1015,                                              // 3^-560
461     -983,                                               // 3^-540
462     -952,                                               // 3^-520
463     -920,                                               // 3^-500
464     -888,                                               // 3^-480
465     -857,                                               // 3^-460
466     -825,                                               // 3^-440
467     -793,                                               // 3^-420
468     -761,                                               // 3^-400
469     -730,                                               // 3^-380
470     -698,                                               // 3^-360
471     -666,                                               // 3^-340
472     -635,                                               // 3^-320
473     -603,                                               // 3^-300
474     -571,                                               // 3^-280
475     -540,                                               // 3^-260
476     -508,                                               // 3^-240
477     -476,                                               // 3^-220
478     -444,                                               // 3^-200
479     -413,                                               // 3^-180
480     -381,                                               // 3^-160
481     -349,                                               // 3^-140
482     -318,                                               // 3^-120
483     -286,                                               // 3^-100
484     -254,                                               // 3^-80
485     -223,                                               // 3^-60
486     -191,                                               // 3^-40
487     -159,                                               // 3^-20
488     -127,                                               // 3^0
489     -96,                                                // 3^20
490     -64,                                                // 3^40
491     -32,                                                // 3^60
492     -1,                                                 // 3^80
493     31,                                                 // 3^100
494     63,                                                 // 3^120
495     94,                                                 // 3^140
496     126,                                                // 3^160
497     158,                                                // 3^180
498     189,                                                // 3^200
499     221,                                                // 3^220
500     253,                                                // 3^240
501     285,                                                // 3^260
502     316,                                                // 3^280
503     348,                                                // 3^300
504     380,                                                // 3^320
505     411,                                                // 3^340
506     443,                                                // 3^360
507     475,                                                // 3^380
508     506,                                                // 3^400
509     538,                                                // 3^420
510     570,                                                // 3^440
511     602,                                                // 3^460
512     633,                                                // 3^480
513     665,                                                // 3^500
514     697,                                                // 3^520
515     728,                                                // 3^540
516     760,                                                // 3^560
517     792,                                                // 3^580
518     823,                                                // 3^600
519     855,                                                // 3^620
520     887,                                                // 3^640
521 ];
522 const BASE3_SMALL_INT_POWERS: [u128; 20] = [1, 3, 9, 27, 81, 243, 729, 2187, 6561, 19683, 59049, 177147, 531441, 1594323, 4782969, 14348907, 43046721, 129140163, 387420489, 1162261467];
523 const BASE3_STEP: i32 = 20;
524 const BASE3_BIAS: i32 = 720;
525 
526 // BASE5
527 
528 const BASE5_SMALL_MANTISSA: [u128; 14] = [
529     170141183460469231731687303715884105728,            // 5^0
530     212676479325586539664609129644855132160,            // 5^1
531     265845599156983174580761412056068915200,            // 5^2
532     332306998946228968225951765070086144000,            // 5^3
533     207691874341393105141219853168803840000,            // 5^4
534     259614842926741381426524816461004800000,            // 5^5
535     324518553658426726783156020576256000000,            // 5^6
536     202824096036516704239472512860160000000,            // 5^7
537     253530120045645880299340641075200000000,            // 5^8
538     316912650057057350374175801344000000000,            // 5^9
539     198070406285660843983859875840000000000,            // 5^10
540     247588007857076054979824844800000000000,            // 5^11
541     309485009821345068724781056000000000000,            // 5^12
542     193428131138340667952988160000000000000,            // 5^13
543 ];
544 const BASE5_SMALL_EXPONENT: [i32; 14] = [
545     -127,                                               // 5^0
546     -125,                                               // 5^1
547     -123,                                               // 5^2
548     -121,                                               // 5^3
549     -118,                                               // 5^4
550     -116,                                               // 5^5
551     -114,                                               // 5^6
552     -111,                                               // 5^7
553     -109,                                               // 5^8
554     -107,                                               // 5^9
555     -104,                                               // 5^10
556     -102,                                               // 5^11
557     -100,                                               // 5^12
558     -97,                                                // 5^13
559 ];
560 const BASE5_LARGE_MANTISSA: [u128; 68] = [
561     285793394306920833441610418092098634655,            // 5^-504
562     203068420253004570555511362849258201390,            // 5^-490
563     288577581746103207017755725657449092679,            // 5^-476
564     205046704412910121830119952091883627559,            // 5^-462
565     291388892624283530821742192659774598780,            // 5^-448
566     207044260935364498850036477975162511299,            // 5^-434
567     294227591176883860910658765384315687611,            // 5^-420
568     209061277570927374050781655074839937648,            // 5^-406
569     297093944213496817569054052050375869453,            // 5^-392
570     211097943899216614887176072592734406508,            // 5^-378
571     299988221142963048588365030287739055137,            // 5^-364
572     213154451346726893197828921904416471830,            // 5^-350
573     302910693998692996157485768413290076965,            // 5^-336
574     215230993204821882725842221200657943544,            // 5^-322
575     305861637464235347360161968596028634045,            // 5^-308
576     217327764647901735884376228537482684576,            // 5^-294
577     308841328899094571460716776609676066664,            // 5^-280
578     219444962751747547330237450047488370802,            // 5^-266
579     311850048364799970571308236412006025948,            // 5^-252
580     221582786512044528543660416923448526878,            // 5^-238
581     314888078651228693933689466069052580904,            // 5^-224
582     223741436863085634409521749481834675708,            // 5^-210
583     317955705303185189918510999237120523316,            // 5^-196
584     225921116696657399755928707376370229068,            // 5^-182
585     321053216647239593947814323906257853121,            // 5^-168
586     228122030881109760932058580285014566244,            // 5^-154
587     324180903818827574883781864350871964922,            // 5^-140
588     230344386280611654799899571593522271174,            // 5^-126
589     327339060789614187001318969682759915221,            // 5^-112
590     232588391774594204975783618524161450993,            // 5^-98
591     330527984395124299475957654016385519914,            // 5^-84
592     234854258277383322788948059678933702737,            // 5^-70
593     333747974362642200374222141588992517906,            // 5^-56
594     237142198758023568227473377297792835283,            // 5^-42
595     336999333339382997433337688587745383420,            // 5^-28
596     239452428260295134118491722992235809940,            // 5^-14
597     170141183460469231731687303715884105728,            // 5^0
598     241785163922925834941235200000000000000,            // 5^14
599     171798691840000000000000000000000000000,            // 5^28
600     244140625000000000000000000000000000000,            // 5^42
601     173472347597680709441192448139190673828,            // 5^56
602     246519032881566189191165176650870696772,            // 5^70
603     175162308040602133865466197911239516410,            // 5^84
604     248920611114445668285762562151204969623,            // 5^98
605     176868732008334225927912486150152183216,            // 5^112
606     251345585423243599518503524095297312920,            // 5^126
607     178591779887855465971216179422709524914,            // 5^140
608     253794183731564922327402455583054354682,            // 5^154
609     180331613628627651967947866455016278082,            // 5^168
610     256266636183436918326986907537468991453,            // 5^182
611     182088396757817547443627082897044283139,            // 5^196
612     258763175164940474024358370140027266101,            // 5^210
613     183862294395666818064937594201088633455,            // 5^224
614     261284035326052074402891767876281837538,            // 5^238
615     185653473271011701515143789632334288014,            // 5^252
616     263829453602698580304979415177988198613,            // 5^266
617     187462101736953869352205554703508169192,            // 5^280
618     266399669239026862544798113253119949479,            // 5^294
619     189288349786683953755640255602884245064,            // 5^308
620     268994923809890385876486015494726082500,            // 5^322
621     191132389069459226417170338759437756337,            // 5^336
622     271615461243554856334256923502490730495,            // 5^350
623     192994392906736931318972184714148973580,            // 5^364
624     274261527844625066050770363850331497104,            // 5^378
625     194874536308464787773268059716493991903,            // 5^392
626     276933372317195090450451374005771742621,            // 5^406
627     196772995989530194869453349330805553038,            // 5^420
628     279631245788224013707368483964622716141,            // 5^434
629 ];
630 const BASE5_LARGE_EXPONENT: [i32; 68] = [
631     -1298,                                              // 5^-504
632     -1265,                                              // 5^-490
633     -1233,                                              // 5^-476
634     -1200,                                              // 5^-462
635     -1168,                                              // 5^-448
636     -1135,                                              // 5^-434
637     -1103,                                              // 5^-420
638     -1070,                                              // 5^-406
639     -1038,                                              // 5^-392
640     -1005,                                              // 5^-378
641     -973,                                               // 5^-364
642     -940,                                               // 5^-350
643     -908,                                               // 5^-336
644     -875,                                               // 5^-322
645     -843,                                               // 5^-308
646     -810,                                               // 5^-294
647     -778,                                               // 5^-280
648     -745,                                               // 5^-266
649     -713,                                               // 5^-252
650     -680,                                               // 5^-238
651     -648,                                               // 5^-224
652     -615,                                               // 5^-210
653     -583,                                               // 5^-196
654     -550,                                               // 5^-182
655     -518,                                               // 5^-168
656     -485,                                               // 5^-154
657     -453,                                               // 5^-140
658     -420,                                               // 5^-126
659     -388,                                               // 5^-112
660     -355,                                               // 5^-98
661     -323,                                               // 5^-84
662     -290,                                               // 5^-70
663     -258,                                               // 5^-56
664     -225,                                               // 5^-42
665     -193,                                               // 5^-28
666     -160,                                               // 5^-14
667     -127,                                               // 5^0
668     -95,                                                // 5^14
669     -62,                                                // 5^28
670     -30,                                                // 5^42
671     3,                                                  // 5^56
672     35,                                                 // 5^70
673     68,                                                 // 5^84
674     100,                                                // 5^98
675     133,                                                // 5^112
676     165,                                                // 5^126
677     198,                                                // 5^140
678     230,                                                // 5^154
679     263,                                                // 5^168
680     295,                                                // 5^182
681     328,                                                // 5^196
682     360,                                                // 5^210
683     393,                                                // 5^224
684     425,                                                // 5^238
685     458,                                                // 5^252
686     490,                                                // 5^266
687     523,                                                // 5^280
688     555,                                                // 5^294
689     588,                                                // 5^308
690     620,                                                // 5^322
691     653,                                                // 5^336
692     685,                                                // 5^350
693     718,                                                // 5^364
694     750,                                                // 5^378
695     783,                                                // 5^392
696     815,                                                // 5^406
697     848,                                                // 5^420
698     880,                                                // 5^434
699 ];
700 const BASE5_SMALL_INT_POWERS: [u128; 14] = [1, 5, 25, 125, 625, 3125, 15625, 78125, 390625, 1953125, 9765625, 48828125, 244140625, 1220703125];
701 const BASE5_STEP: i32 = 14;
702 const BASE5_BIAS: i32 = 504;
703 
704 // BASE6
705 
706 const BASE6_SMALL_MANTISSA: [u128; 12] = [
707     170141183460469231731687303715884105728,            // 6^0
708     255211775190703847597530955573826158592,            // 6^1
709     191408831393027885698148216680369618944,            // 6^2
710     287113247089541828547222325020554428416,            // 6^3
711     215334935317156371410416743765415821312,            // 6^4
712     323002402975734557115625115648123731968,            // 6^5
713     242251802231800917836718836736092798976,            // 6^6
714     181688851673850688377539127552069599232,            // 6^7
715     272533277510776032566308691328104398848,            // 6^8
716     204399958133082024424731518496078299136,            // 6^9
717     306599937199623036637097277744117448704,            // 6^10
718     229949952899717277477822958308088086528,            // 6^11
719 ];
720 const BASE6_SMALL_EXPONENT: [i32; 12] = [
721     -127,                                               // 6^0
722     -125,                                               // 6^1
723     -122,                                               // 6^2
724     -120,                                               // 6^3
725     -117,                                               // 6^4
726     -115,                                               // 6^5
727     -112,                                               // 6^6
728     -109,                                               // 6^7
729     -107,                                               // 6^8
730     -104,                                               // 6^9
731     -102,                                               // 6^10
732     -99,                                                // 6^11
733 ];
734 const BASE6_LARGE_MANTISSA: [u128; 71] = [
735     206105367118290399407064648402758144682,            // 6^-444
736     208917317212507950117664039252872831665,            // 6^-432
737     211767631486382365261996259087726574961,            // 6^-420
738     214656833352574406771088703014069554755,            // 6^-408
739     217585453364802351586979201161384846208,            // 6^-396
740     220554029315269330081435801781477974040,            // 6^-384
741     223563106333419891448609016293621894840,            // 6^-372
742     226613236986043931067161987739751269180,            // 6^-360
743     229704981378746362247969882824709232796,            // 6^-348
744     232838907258801165579649662968151663564,            // 6^-336
745     236015590119408703302029793810763336632,            // 6^-324
746     239235613305375443823879271798297650114,            // 6^-312
747     242499568120235502703106353919523432682,            // 6^-300
748     245808053934833671173174941698733239342,            // 6^-288
749     249161678297389871677290466673500998400,            // 6^-276
750     252561057045065251911260457800735557729,            // 6^-264
751     256006814417050404626793229969178591795,            // 6^-252
752     259499583169196479959998361450291137700,            // 6^-240
753     263040004690210240376322725691803307553,            // 6^-228
754     266628729119434395515123988465075762881,            // 6^-216
755     270266415466234845327287688358055741312,            // 6^-204
756     273953731731016754981191818978678705632,            // 6^-192
757     277691355027891684120101092281051616669,            // 6^-180
758     281479971709018296242657937208050445965,            // 6^-168
759     285320277490639481303204301467482637509,            // 6^-156
760     289212977580839036146652597763405686112,            // 6^-144
761     293158786809041363160730749526943361727,            // 6^-132
762     297158429757277967604640789526650060843,            // 6^-120
763     301212640893244858516269504216828222245,            // 6^-108
764     305322164705175286969651759320250334279,            // 6^-96
765     309487755838552588810803796052767101096,            // 6^-84
766     313710179234688236904530296665341569850,            // 6^-72
767     317990210271190550439415903835536554761,            // 6^-60
768     322328634904349856025836233807108654402,            // 6^-48
769     326726249813466247246220462666861782844,            // 6^-36
770     331183862547146446042592332649497399781,            // 6^-24
771     335702291671596630919115661345637412333,            // 6^-12
772     170141183460469231731687303715884105728,            // 6^0
773     172462464674787958108367218731066064896,            // 6^12
774     174815415743320440759790006808579407872,            // 6^24
775     177200468746272961345336076752392290304,            // 6^36
776     179618061658836457920697688990341398528,            // 6^48
777     182068638431613361423174859113151594496,            // 6^60
778     184552649072141716781794491390137475072,            // 6^72
779     187070549727531559196917812917453861026,            // 6^84
780     189622802768228720381105803326920695033,            // 6^96
781     192209876872921446586714266254161951235,            // 6^108
782     194832247114605420104007752175098574688,            // 6^120
783     197490395047822988635051696441052554380,            // 6^132
784     200184808797092622572327630249651738267,            // 6^144
785     202915983146544838776512848181734408257,            // 6^156
786     205684419630781050995309380627725821797,            // 6^168
787     208490626626972031635281014538153149532,            // 6^180
788     211335119448212897232599978727666183358,            // 6^192
789     214218420438151760708217936124820030498,            // 6^204
790     217141059066909427380630585083218539864,            // 6^216
791     220103572028307748788051030668660629356,            // 6^228
792     223106503338424488684979682521025988628,            // 6^240
793     226150404435492799169987273137391228527,            // 6^252
794     229235834281163651816744244429413474808,            // 6^264
795     232363359463149818964276081092475750857,            // 6^276
796     235533554299270254021060647605641184828,            // 6^288
797     238747000942913976797497733353022683918,            // 6^300
798     242004289489942830549695955106475311593,            // 6^312
799     245306018087052741642305313258629505287,            // 6^324
800     248652793041613380567795520750960012282,            // 6^336
801     252045228933006394543323172270604972624,            // 6^348
802     255483948725482657093998355855298189652,            // 6^360
803     258969583882559258973487053363982248701,            // 6^372
804     262502774482977247520692697766891651596,            // 6^384
805     266084169338241408156670471179837543899,            // 6^396
806 ];
807 const BASE6_LARGE_EXPONENT: [i32; 71] = [
808     -1275,                                              // 6^-444
809     -1244,                                              // 6^-432
810     -1213,                                              // 6^-420
811     -1182,                                              // 6^-408
812     -1151,                                              // 6^-396
813     -1120,                                              // 6^-384
814     -1089,                                              // 6^-372
815     -1058,                                              // 6^-360
816     -1027,                                              // 6^-348
817     -996,                                               // 6^-336
818     -965,                                               // 6^-324
819     -934,                                               // 6^-312
820     -903,                                               // 6^-300
821     -872,                                               // 6^-288
822     -841,                                               // 6^-276
823     -810,                                               // 6^-264
824     -779,                                               // 6^-252
825     -748,                                               // 6^-240
826     -717,                                               // 6^-228
827     -686,                                               // 6^-216
828     -655,                                               // 6^-204
829     -624,                                               // 6^-192
830     -593,                                               // 6^-180
831     -562,                                               // 6^-168
832     -531,                                               // 6^-156
833     -500,                                               // 6^-144
834     -469,                                               // 6^-132
835     -438,                                               // 6^-120
836     -407,                                               // 6^-108
837     -376,                                               // 6^-96
838     -345,                                               // 6^-84
839     -314,                                               // 6^-72
840     -283,                                               // 6^-60
841     -252,                                               // 6^-48
842     -221,                                               // 6^-36
843     -190,                                               // 6^-24
844     -159,                                               // 6^-12
845     -127,                                               // 6^0
846     -96,                                                // 6^12
847     -65,                                                // 6^24
848     -34,                                                // 6^36
849     -3,                                                 // 6^48
850     28,                                                 // 6^60
851     59,                                                 // 6^72
852     90,                                                 // 6^84
853     121,                                                // 6^96
854     152,                                                // 6^108
855     183,                                                // 6^120
856     214,                                                // 6^132
857     245,                                                // 6^144
858     276,                                                // 6^156
859     307,                                                // 6^168
860     338,                                                // 6^180
861     369,                                                // 6^192
862     400,                                                // 6^204
863     431,                                                // 6^216
864     462,                                                // 6^228
865     493,                                                // 6^240
866     524,                                                // 6^252
867     555,                                                // 6^264
868     586,                                                // 6^276
869     617,                                                // 6^288
870     648,                                                // 6^300
871     679,                                                // 6^312
872     710,                                                // 6^324
873     741,                                                // 6^336
874     772,                                                // 6^348
875     803,                                                // 6^360
876     834,                                                // 6^372
877     865,                                                // 6^384
878     896,                                                // 6^396
879 ];
880 const BASE6_SMALL_INT_POWERS: [u128; 12] = [1, 6, 36, 216, 1296, 7776, 46656, 279936, 1679616, 10077696, 60466176, 362797056];
881 const BASE6_STEP: i32 = 12;
882 const BASE6_BIAS: i32 = 444;
883 
884 // BASE7
885 
886 const BASE7_SMALL_MANTISSA: [u128; 11] = [
887     170141183460469231731687303715884105728,            // 7^0
888     297747071055821155530452781502797185024,            // 7^1
889     260528687173843511089146183814947536896,            // 7^2
890     227962601277113072203002910838079094784,            // 7^3
891     199467276117473938177627546983319207936,            // 7^4
892     174533866602789695905424103610404306944,            // 7^5
893     305434266554881967834492181318207537152,            // 7^6
894     267254983235521721855180658653431595008,            // 7^7
895     233848110331081506623283076321752645632,            // 7^8
896     204617096539696318295372691781533564928,            // 7^9
897     179039959472234278508451105308841869312,            // 7^10
898 ];
899 const BASE7_SMALL_EXPONENT: [i32; 11] = [
900     -127,                                               // 7^0
901     -125,                                               // 7^1
902     -122,                                               // 7^2
903     -119,                                               // 7^3
904     -116,                                               // 7^4
905     -113,                                               // 7^5
906     -111,                                               // 7^6
907     -108,                                               // 7^7
908     -105,                                               // 7^8
909     -102,                                               // 7^9
910     -99,                                                // 7^10
911 ];
912 const BASE7_LARGE_MANTISSA: [u128; 71] = [
913     225523710066019267908218449093892378358,            // 7^-407
914     207654229874777697952558290622819921790,            // 7^-396
915     191200646585071218824745087565327043379,            // 7^-385
916     176050770921424471559828841966017113260,            // 7^-374
917     324202605959679334675793064499391555083,            // 7^-363
918     298514255748300407155832676761118149894,            // 7^-352
919     274861334384351909098688755274300249465,            // 7^-341
920     253082563679127241756740166823033329043,            // 7^-330
921     233029444399168140266755890269514708731,            // 7^-319
922     214565243719567885018434177936373702812,            // 7^-308
923     197564062906901525077828647577582055243,            // 7^-297
924     181909978874749832229630901118123515094,            // 7^-286
925     334992507516972618831705765612473924060,            // 7^-275
926     308449214239576126269380201889590576494,            // 7^-264
927     284009091636748185128341566413187692045,            // 7^-253
928     261505493963360706349361998265286260917,            // 7^-242
929     240784979730461811097321743219099069136,            // 7^-231
930     221706265459654420066135217688280855198,            // 7^-220
931     204139262337252438224351496710052887294,            // 7^-209
932     187964189199610581269006081054389519147,            // 7^-198
933     173070755801490399767170008783447571912,            // 7^-187
934     318714821597104302344272129046782646031,            // 7^-176
935     293461298632634947256039303556899737616,            // 7^-165
936     270208750768480083796084384984407980627,            // 7^-154
937     248798629775241702400557051000361115726,            // 7^-143
938     229084950069124576377435007616984162844,            // 7^-132
939     210933293304638808346189699277966975327,            // 7^-121
940     194219891838880796776419735762035423417,            // 7^-110
941     178830784817964977889863278397948540205,            // 7^-99
942     329322082262710237520775170056072850605,            // 7^-88
943     303228087871569629902816732340606701122,            // 7^-77
944     279201663740542055384000770694089408486,            // 7^-66
945     257078984940548995242906668328695771951,            // 7^-55
946     236709207289964795762477040448859922676,            // 7^-44
947     217953438818817001855782665313698094789,            // 7^-33
948     200683792729517998822275406364627986706,            // 7^-22
949     184782515396710906443711214287193178833,            // 7^-11
950     170141183460469231731687303715884105728,            // 7^0
951     313319929076409987389789434290473271296,            // 7^11
952     288493873028852398739253829029106548736,            // 7^22
953     265634921533798919351224824788236107776,            // 7^33
954     244587210111081219100242972308429222416,            // 7^44
955     225207224277966141315155116349116687572,            // 7^55
956     207362820991138609531788808643065835705,            // 7^66
957     190932327625202079604864455739987836428,            // 7^77
958     175803712344053086257499345217280929659,            // 7^88
959     323747640416561983962207324433251030705,            // 7^99
960     298095339619934405668456872884344580325,            // 7^110
961     274475611277932187651307585787198545738,            // 7^121
962     252727403529513497084111370284014563793,            // 7^132
963     232702425535702904483240997815950541938,            // 7^143
964     214264136353838934720254978302625752306,            // 7^154
965     197286813928859418414994791325492154413,            // 7^165
966     181654697853512422889189735564216996803,            // 7^176
967     334522400104752565046325502667785120787,            // 7^187
968     308016356015425756696586706818979868623,            // 7^198
969     283610531143243549972387138852602501496,            // 7^209
970     261138513603233655506120063924465915820,            // 7^220
971     240447077236577495145565086308268824286,            // 7^231
972     221395136833224081873557773886454798418,            // 7^242
973     203852786137945162132478938839041683065,            // 7^253
974     187700412080445632409314398956810353518,            // 7^264
975     172827879189879361689316520165778889316,            // 7^275
976     318267557265350256871483486812089934265,            // 7^286
977     293049473506426909088112326597996634777,            // 7^297
978     269829556805234360375792834335085449819,            // 7^308
979     248449481428986202531286841797890645972,            // 7^319
980     228763466660872229208763580066607974130,            // 7^330
981     210637282789652967136592584117374228567,            // 7^341
982     193947335860149215724544902551342320202,            // 7^352
983     178579824943969003959847035500732297209,            // 7^363
984 ];
985 const BASE7_LARGE_EXPONENT: [i32; 71] = [
986     -1270,                                              // 7^-407
987     -1239,                                              // 7^-396
988     -1208,                                              // 7^-385
989     -1177,                                              // 7^-374
990     -1147,                                              // 7^-363
991     -1116,                                              // 7^-352
992     -1085,                                              // 7^-341
993     -1054,                                              // 7^-330
994     -1023,                                              // 7^-319
995     -992,                                               // 7^-308
996     -961,                                               // 7^-297
997     -930,                                               // 7^-286
998     -900,                                               // 7^-275
999     -869,                                               // 7^-264
1000     -838,                                               // 7^-253
1001     -807,                                               // 7^-242
1002     -776,                                               // 7^-231
1003     -745,                                               // 7^-220
1004     -714,                                               // 7^-209
1005     -683,                                               // 7^-198
1006     -652,                                               // 7^-187
1007     -622,                                               // 7^-176
1008     -591,                                               // 7^-165
1009     -560,                                               // 7^-154
1010     -529,                                               // 7^-143
1011     -498,                                               // 7^-132
1012     -467,                                               // 7^-121
1013     -436,                                               // 7^-110
1014     -405,                                               // 7^-99
1015     -375,                                               // 7^-88
1016     -344,                                               // 7^-77
1017     -313,                                               // 7^-66
1018     -282,                                               // 7^-55
1019     -251,                                               // 7^-44
1020     -220,                                               // 7^-33
1021     -189,                                               // 7^-22
1022     -158,                                               // 7^-11
1023     -127,                                               // 7^0
1024     -97,                                                // 7^11
1025     -66,                                                // 7^22
1026     -35,                                                // 7^33
1027     -4,                                                 // 7^44
1028     27,                                                 // 7^55
1029     58,                                                 // 7^66
1030     89,                                                 // 7^77
1031     120,                                                // 7^88
1032     150,                                                // 7^99
1033     181,                                                // 7^110
1034     212,                                                // 7^121
1035     243,                                                // 7^132
1036     274,                                                // 7^143
1037     305,                                                // 7^154
1038     336,                                                // 7^165
1039     367,                                                // 7^176
1040     397,                                                // 7^187
1041     428,                                                // 7^198
1042     459,                                                // 7^209
1043     490,                                                // 7^220
1044     521,                                                // 7^231
1045     552,                                                // 7^242
1046     583,                                                // 7^253
1047     614,                                                // 7^264
1048     645,                                                // 7^275
1049     675,                                                // 7^286
1050     706,                                                // 7^297
1051     737,                                                // 7^308
1052     768,                                                // 7^319
1053     799,                                                // 7^330
1054     830,                                                // 7^341
1055     861,                                                // 7^352
1056     892,                                                // 7^363
1057 ];
1058 const BASE7_SMALL_INT_POWERS: [u128; 11] = [1, 7, 49, 343, 2401, 16807, 117649, 823543, 5764801, 40353607, 282475249];
1059 const BASE7_STEP: i32 = 11;
1060 const BASE7_BIAS: i32 = 407;
1061 
1062 // BASE9
1063 
1064 const BASE9_SMALL_MANTISSA: [u128; 10] = [
1065     170141183460469231731687303715884105728,            // 9^0
1066     191408831393027885698148216680369618944,            // 9^1
1067     215334935317156371410416743765415821312,            // 9^2
1068     242251802231800917836718836736092798976,            // 9^3
1069     272533277510776032566308691328104398848,            // 9^4
1070     306599937199623036637097277744117448704,            // 9^5
1071     172462464674787958108367218731066064896,            // 9^6
1072     194020272759136452871913121072449323008,            // 9^7
1073     218272806854028509480902261206505488384,            // 9^8
1074     245556907710782073166015043857318674432,            // 9^9
1075 ];
1076 const BASE9_SMALL_EXPONENT: [i32; 10] = [
1077     -127,                                               // 9^0
1078     -124,                                               // 9^1
1079     -121,                                               // 9^2
1080     -118,                                               // 9^3
1081     -115,                                               // 9^4
1082     -112,                                               // 9^5
1083     -108,                                               // 9^6
1084     -105,                                               // 9^7
1085     -102,                                               // 9^8
1086     -99,                                                // 9^9
1087 ];
1088 const BASE9_LARGE_MANTISSA: [u128; 69] = [
1089     301829093537629265639465570217176944359,            // 9^-360
1090     245033990385703656345786023933864839340,            // 9^-350
1091     198926007233479871031630637668169238011,            // 9^-340
1092     322988302900880006728964617948539328448,            // 9^-330
1093     262211676747596696167096696967233799204,            // 9^-320
1094     212871372756449173771443137071089544143,            // 9^-310
1095     172815421118085121562612771428651141606,            // 9^-300
1096     280593575260967566098415738074481154338,            // 9^-290
1097     227794354139073103116567345878808448350,            // 9^-280
1098     184930348919702200346046943747485274024,            // 9^-270
1099     300264105147079021545114594266031000970,            // 9^-260
1100     243763485459391712918376663011554847091,            // 9^-250
1101     197894572893436379626501802082900685163,            // 9^-240
1102     321313603691473325606249593990411338331,            // 9^-230
1103     260852105259086286749566195634740776863,            // 9^-220
1104     211767631486382365261996259087726574961,            // 9^-210
1105     171919370559843833352674924374427532806,            // 9^-200
1106     279138693352137745884317186629683060895,            // 9^-190
1107     226613236986043931067161987739751269180,            // 9^-180
1108     183971482278558945643179980616811190964,            // 9^-170
1109     298707231244876640116631457791747347925,            // 9^-160
1110     242499568120235502703106353919523432682,            // 9^-150
1111     196868486555962367745019627988939060464,            // 9^-140
1112     319647587822660709450189016904055940251,            // 9^-130
1113     259499583169196479959998361450291137700,            // 9^-120
1114     210669613131404954481085620515615417585,            // 9^-110
1115     171027966037226738058674240289082148799,            // 9^-100
1116     277691355027891684120101092281051616669,            // 9^-90
1117     225438243943221318560556485110109738278,            // 9^-80
1118     183017587375374702561553597022155160742,            // 9^-70
1119     297158429757277967604640789526650060843,            // 9^-60
1120     241242204211496523037749538228345943134,            // 9^-50
1121     195847720491584060106836777189641681162,            // 9^-40
1122     317990210271190550439415903835536554761,            // 9^-30
1123     258154073926689380540223575440483383976,            // 9^-20
1124     209577288018116110386327960504760073299,            // 9^-10
1125     170141183460469231731687303715884105728,            // 9^0
1126     276251521174629832311766924339483508736,            // 9^10
1127     224269343257001716702690972139746492416,            // 9^20
1128     182068638431613361423174859113151594496,            // 9^30
1129     295617658828691846632166420412766595202,            // 9^40
1130     239991359753539474232337032335634004651,            // 9^50
1131     194832247114605420104007752175098574688,            // 9^60
1132     316341426247257477645159711999449660471,            // 9^70
1133     256815541169845811576524073480007610450,            // 9^80
1134     208490626626972031635281014538153149532,            // 9^90
1135     338517997729425004575949331160209430911,            // 9^100
1136     274819152881557244028610584245948464515,            // 9^110
1137     223106503338424488684979682521025988628,            // 9^120
1138     181124609802400910077427551154104473922,            // 9^130
1139     294084876820548989626661915132664622178,            // 9^140
1140     238747000942913976797497733353022683918,            // 9^150
1141     193822038982362660063056049982127016523,            // 9^160
1142     314701191193291934781116205950433765545,            // 9^170
1143     255483948725482657093998355855298189652,            // 9^180
1144     207409599591488195571905341445445255582,            // 9^190
1145     336762776818711782198286065086981891498,            // 9^200
1146     273394211439632029990640781047045990695,            // 9^210
1147     221949692762318233808346663450192754968,            // 9^220
1148     180185475975832393914650652957737664335,            // 9^230
1149     292560042310176717160312096633717510967,            // 9^240
1150     237509094151441049982785534773499431992,            // 9^250
1151     192817068794482616882547252154136283242,            // 9^260
1152     313069460782756034010893203297842312622,            // 9^270
1153     254159260607975299744356396919078736707,            // 9^280
1154     206334177697445743564032291193028958152,            // 9^290
1155     335016656754825225194410391893304442626,            // 9^300
1156     271976658340519265432186039827268288213,            // 9^310
1157     220798880266451537830039115389735391778,            // 9^320
1158 ];
1159 const BASE9_LARGE_EXPONENT: [i32; 69] = [
1160     -1269,                                              // 9^-360
1161     -1237,                                              // 9^-350
1162     -1205,                                              // 9^-340
1163     -1174,                                              // 9^-330
1164     -1142,                                              // 9^-320
1165     -1110,                                              // 9^-310
1166     -1078,                                              // 9^-300
1167     -1047,                                              // 9^-290
1168     -1015,                                              // 9^-280
1169     -983,                                               // 9^-270
1170     -952,                                               // 9^-260
1171     -920,                                               // 9^-250
1172     -888,                                               // 9^-240
1173     -857,                                               // 9^-230
1174     -825,                                               // 9^-220
1175     -793,                                               // 9^-210
1176     -761,                                               // 9^-200
1177     -730,                                               // 9^-190
1178     -698,                                               // 9^-180
1179     -666,                                               // 9^-170
1180     -635,                                               // 9^-160
1181     -603,                                               // 9^-150
1182     -571,                                               // 9^-140
1183     -540,                                               // 9^-130
1184     -508,                                               // 9^-120
1185     -476,                                               // 9^-110
1186     -444,                                               // 9^-100
1187     -413,                                               // 9^-90
1188     -381,                                               // 9^-80
1189     -349,                                               // 9^-70
1190     -318,                                               // 9^-60
1191     -286,                                               // 9^-50
1192     -254,                                               // 9^-40
1193     -223,                                               // 9^-30
1194     -191,                                               // 9^-20
1195     -159,                                               // 9^-10
1196     -127,                                               // 9^0
1197     -96,                                                // 9^10
1198     -64,                                                // 9^20
1199     -32,                                                // 9^30
1200     -1,                                                 // 9^40
1201     31,                                                 // 9^50
1202     63,                                                 // 9^60
1203     94,                                                 // 9^70
1204     126,                                                // 9^80
1205     158,                                                // 9^90
1206     189,                                                // 9^100
1207     221,                                                // 9^110
1208     253,                                                // 9^120
1209     285,                                                // 9^130
1210     316,                                                // 9^140
1211     348,                                                // 9^150
1212     380,                                                // 9^160
1213     411,                                                // 9^170
1214     443,                                                // 9^180
1215     475,                                                // 9^190
1216     506,                                                // 9^200
1217     538,                                                // 9^210
1218     570,                                                // 9^220
1219     602,                                                // 9^230
1220     633,                                                // 9^240
1221     665,                                                // 9^250
1222     697,                                                // 9^260
1223     728,                                                // 9^270
1224     760,                                                // 9^280
1225     792,                                                // 9^290
1226     823,                                                // 9^300
1227     855,                                                // 9^310
1228     887,                                                // 9^320
1229 ];
1230 const BASE9_SMALL_INT_POWERS: [u128; 10] = [1, 9, 81, 729, 6561, 59049, 531441, 4782969, 43046721, 387420489];
1231 const BASE9_STEP: i32 = 10;
1232 const BASE9_BIAS: i32 = 360;
1233 
1234 // BASE11
1235 
1236 const BASE11_SMALL_MANTISSA: [u128; 9] = [
1237     170141183460469231731687303715884105728,            // 11^0
1238     233944127258145193631070042609340645376,            // 11^1
1239     321673174979949641242721308587843387392,            // 11^2
1240     221150307798715378354370899654142328832,            // 11^3
1241     304081673223233645237259987024445702144,            // 11^4
1242     209056150340973131100616241079306420224,            // 11^5
1243     287452206718838055263347331484046327808,            // 11^6
1244     197623392119201162993551290395281850368,            // 11^7
1245     271732164163901599116133024293512544256,            // 11^8
1246 ];
1247 const BASE11_SMALL_EXPONENT: [i32; 9] = [
1248     -127,                                               // 11^0
1249     -124,                                               // 11^1
1250     -121,                                               // 11^2
1251     -117,                                               // 11^3
1252     -114,                                               // 11^4
1253     -110,                                               // 11^5
1254     -107,                                               // 11^6
1255     -103,                                               // 11^7
1256     -100,                                               // 11^8
1257 ];
1258 const BASE11_LARGE_MANTISSA: [u128; 70] = [
1259     171238059048456285069153007806767780751,            // 11^-333
1260     188020237695718721716314139814895141308,            // 11^-324
1261     206447153042951189194086232691622882083,            // 11^-315
1262     226679997440031906769564274339983654138,            // 11^-306
1263     248895760886189129917706060109685643694,            // 11^-297
1264     273288779277949488106534827711219187027,            // 11^-288
1265     300072434393060227248554937081761703289,            // 11^-279
1266     329481020481262984343182946079685486146,            // 11^-270
1267     180885896895108223589085363619768036079,            // 11^-261
1268     198613611477559667549559644399735817047,            // 11^-252
1269     218078729968836026458633966547967004969,            // 11^-243
1270     239451526564652757041971603611460905574,            // 11^-234
1271     262918963175987885652063848834117643272,            // 11^-225
1272     288686324907902004950333378158035100892,            // 11^-216
1273     316979015823390018300576675081611005238,            // 11^-207
1274     174022265350496153683469750680295263035,            // 11^-198
1275     191077310017213090920037889613280023761,            // 11^-189
1276     209803833606456768694276179860414245615,            // 11^-180
1277     230365649338482385703357683130616542302,            // 11^-171
1278     252942624941184287338239913752743474826,            // 11^-162
1279     277732256071429933018369293137137136134,            // 11^-153
1280     304951393939484349279174830456271141999,            // 11^-144
1281     334838142249192351062534286575243350001,            // 11^-135
1282     183826970023851061892407973678416422311,            // 11^-126
1283     201842924352393404728314593418040675821,            // 11^-117
1284     221624531513738305774870271734740961947,            // 11^-108
1285     243344834238186465986122993315325591576,            // 11^-99
1286     267193834301414676708834595107417746247,            // 11^-90
1287     293380154594991977782504639045547494542,            // 11^-81
1288     322132864088045607402818330486415493575,            // 11^-72
1289     176851740822108453297561032060281913714,            // 11^-63
1290     194184088111306107232610402385759498575,            // 11^-54
1291     213215091354676888577329040601887973466,            // 11^-45
1292     234111227256299197427917870802090967668,            // 11^-36
1293     257055288062508663991611489278928709768,            // 11^-27
1294     282247980565918687696808555402942563478,            // 11^-18
1295     309909681819761564465444461107912469729,            // 11^-9
1296     170141183460469231731687303715884105728,            // 11^0
1297     186815862862682349392341454201789874176,            // 11^9
1298     205124743505955904636591107127579246592,            // 11^18
1299     225227985212968648451224991661780107264,            // 11^27
1300     247301444262965381085386823495099626888,            // 11^36
1301     271538211722310826714720080747313199115,            // 11^45
1302     298150302539063592923933328180322755271,            // 11^54
1303     327370510177191550022527822209865447333,            // 11^63
1304     179727221507067050840782578187764330990,            // 11^72
1305     197341380157710189331417385894277071911,            // 11^81
1306     216681813672942089280666997109850212851,            // 11^90
1307     237917705546974217796728292841033536358,            // 11^99
1308     261234820095126400184969690376374338338,            // 11^108
1309     286837127456489808703442688252756740915,            // 11^117
1310     314948587854906379895896832699151980516,            // 11^126
1311     172907555363184572545974225978641470455,            // 11^135
1312     189853352925309785288573204303090400331,            // 11^144
1313     208459922652152508348644224820166488004,            // 11^153
1314     228890028448627145607277691781146666326,            // 11^162
1315     251322385889182188596856419989450117198,            // 11^171
1316     275953225560490099471194727985491113834,            // 11^180
1317     302998009619470597652934458975103615488,            // 11^189
1318     332693316582509542060143699364121908613,            // 11^198
1319     182649455416682266091504883729813020363,            // 11^207
1320     200550007476552106538373760555841065584,            // 11^216
1321     220204902374823007850602460837751774656,            // 11^225
1322     241786074406278472344858080843135119733,            // 11^234
1323     265482308278902675848717553283442644763,            // 11^243
1324     291500890537904924029114199837605959154,            // 11^252
1325     320069422837484936971208194402230692262,            // 11^261
1326     175718906461109937023963056381563419957,            // 11^270
1327     192940230367248485471498733602562118815,            // 11^279
1328     211849329385655768374338506351963365331,            // 11^288
1329 ];
1330 const BASE11_LARGE_EXPONENT: [i32; 70] = [
1331     -1279,                                              // 11^-333
1332     -1248,                                              // 11^-324
1333     -1217,                                              // 11^-315
1334     -1186,                                              // 11^-306
1335     -1155,                                              // 11^-297
1336     -1124,                                              // 11^-288
1337     -1093,                                              // 11^-279
1338     -1062,                                              // 11^-270
1339     -1030,                                              // 11^-261
1340     -999,                                               // 11^-252
1341     -968,                                               // 11^-243
1342     -937,                                               // 11^-234
1343     -906,                                               // 11^-225
1344     -875,                                               // 11^-216
1345     -844,                                               // 11^-207
1346     -812,                                               // 11^-198
1347     -781,                                               // 11^-189
1348     -750,                                               // 11^-180
1349     -719,                                               // 11^-171
1350     -688,                                               // 11^-162
1351     -657,                                               // 11^-153
1352     -626,                                               // 11^-144
1353     -595,                                               // 11^-135
1354     -563,                                               // 11^-126
1355     -532,                                               // 11^-117
1356     -501,                                               // 11^-108
1357     -470,                                               // 11^-99
1358     -439,                                               // 11^-90
1359     -408,                                               // 11^-81
1360     -377,                                               // 11^-72
1361     -345,                                               // 11^-63
1362     -314,                                               // 11^-54
1363     -283,                                               // 11^-45
1364     -252,                                               // 11^-36
1365     -221,                                               // 11^-27
1366     -190,                                               // 11^-18
1367     -159,                                               // 11^-9
1368     -127,                                               // 11^0
1369     -96,                                                // 11^9
1370     -65,                                                // 11^18
1371     -34,                                                // 11^27
1372     -3,                                                 // 11^36
1373     28,                                                 // 11^45
1374     59,                                                 // 11^54
1375     90,                                                 // 11^63
1376     122,                                                // 11^72
1377     153,                                                // 11^81
1378     184,                                                // 11^90
1379     215,                                                // 11^99
1380     246,                                                // 11^108
1381     277,                                                // 11^117
1382     308,                                                // 11^126
1383     340,                                                // 11^135
1384     371,                                                // 11^144
1385     402,                                                // 11^153
1386     433,                                                // 11^162
1387     464,                                                // 11^171
1388     495,                                                // 11^180
1389     526,                                                // 11^189
1390     557,                                                // 11^198
1391     589,                                                // 11^207
1392     620,                                                // 11^216
1393     651,                                                // 11^225
1394     682,                                                // 11^234
1395     713,                                                // 11^243
1396     744,                                                // 11^252
1397     775,                                                // 11^261
1398     807,                                                // 11^270
1399     838,                                                // 11^279
1400     869,                                                // 11^288
1401 ];
1402 const BASE11_SMALL_INT_POWERS: [u128; 9] = [1, 11, 121, 1331, 14641, 161051, 1771561, 19487171, 214358881];
1403 const BASE11_STEP: i32 = 9;
1404 const BASE11_BIAS: i32 = 333;
1405 
1406 // BASE12
1407 
1408 const BASE12_SMALL_MANTISSA: [u128; 9] = [
1409     170141183460469231731687303715884105728,            // 12^0
1410     255211775190703847597530955573826158592,            // 12^1
1411     191408831393027885698148216680369618944,            // 12^2
1412     287113247089541828547222325020554428416,            // 12^3
1413     215334935317156371410416743765415821312,            // 12^4
1414     323002402975734557115625115648123731968,            // 12^5
1415     242251802231800917836718836736092798976,            // 12^6
1416     181688851673850688377539127552069599232,            // 12^7
1417     272533277510776032566308691328104398848,            // 12^8
1418 ];
1419 const BASE12_SMALL_EXPONENT: [i32; 9] = [
1420     -127,                                               // 12^0
1421     -124,                                               // 12^1
1422     -120,                                               // 12^2
1423     -117,                                               // 12^3
1424     -113,                                               // 12^4
1425     -110,                                               // 12^5
1426     -106,                                               // 12^6
1427     -102,                                               // 12^7
1428     -99,                                                // 12^8
1429 ];
1430 const BASE12_LARGE_MANTISSA: [u128; 68] = [
1431     236015590119408703302029793810763336632,            // 12^-324
1432     283538504658222748235708766575760177913,            // 12^-315
1433     170315197362908885300398426895467760677,            // 12^-306
1434     204609010601448705405745986119597896326,            // 12^-297
1435     245808053934833671173174941698733239342,            // 12^-288
1436     295302729833943551617529441983408590696,            // 12^-279
1437     177381702616012906692133545122052956869,            // 12^-270
1438     213098391881773806300126011269370626834,            // 12^-261
1439     256006814417050404626793229969178591795,            // 12^-252
1440     307555061533862494767405465422567274311,            // 12^-243
1441     184741402471039290909022270993420155647,            // 12^-234
1442     221940003957364890317522299802459040748,            // 12^-225
1443     266628729119434395515123988465075762881,            // 12^-216
1444     320315751663685742610118741757695693407,            // 12^-207
1445     192406461791880080316008520325217417399,            // 12^-198
1446     231148461148045387015380597263260157877,            // 12^-189
1447     277691355027891684120101092281051616669,            // 12^-180
1448     333605892395873536287594592246578306329,            // 12^-171
1449     200389550171752283164939097875653100692,            // 12^-162
1450     240738984132727062349578629363188475398,            // 12^-153
1451     289212977580839036146652597763405686112,            // 12^-144
1452     173723725516468955947099703423373843986,            // 12^-135
1453     208703862874796048578293668364396201854,            // 12^-126
1454     250727425107703285166415666163110988836,            // 12^-117
1455     301212640893244858516269504216828222245,            // 12^-108
1456     180931653158622392278312153671259457350,            // 12^-99
1457     217363142646555453321168098187951653993,            // 12^-90
1458     261130293988778746809115702919522241550,            // 12^-81
1459     313710179234688236904530296665341569850,            // 12^-72
1460     188438643123668474334468683754392032451,            // 12^-63
1461     226381702429392491474935736226666160567,            // 12^-54
1462     271964785700545191021799322274747927151,            // 12^-45
1463     326726249813466247246220462666861782844,            // 12^-36
1464     196257103731642338395610271199702162833,            // 12^-27
1465     235774449020380624184618955567855082461,            // 12^-18
1466     283248808597909657338003839260381566656,            // 12^-9
1467     170141183460469231731687303715884105728,            // 12^0
1468     204399958133082024424731518496078299136,            // 12^9
1469     245556907710782073166015043857318674432,            // 12^18
1470     295001014066853243782145636489477750784,            // 12^27
1471     177200468746272961345336076752392290304,            // 12^36
1472     212880665669732098276382446210774990848,            // 12^45
1473     255745247947835503562868389206950936576,            // 12^54
1474     307240827353347547401607574753443315712,            // 12^63
1475     184552649072141716781794491390137475072,            // 12^72
1476     221713244121518884974124815309574946401,            // 12^81
1477     266356310061270520809673995345359110719,            // 12^90
1478     319988479671385965643116043114178672868,            // 12^99
1479     192209876872921446586714266254161951235,            // 12^108
1480     230912292876569386789935113689005718149,            // 12^117
1481     277407633098725295421526662764935275289,            // 12^126
1482     333265041643201293321649737744276185517,            // 12^135
1483     200184808797092622572327630249651738267,            // 12^144
1484     240493017062571660772163375622796335712,            // 12^153
1485     288917483816076538023589582665008561757,            // 12^162
1486     173546229063471511777292289904643662141,            // 12^171
1487     208490626626972031635281014538153149532,            // 12^180
1488     250471252679363433757155530343900661758,            // 12^189
1489     300904886870600004067510516586852827477,            // 12^198
1490     180746792244690548097558883605316900733,            // 12^207
1491     217141059066909427380630585083218539864,            // 12^216
1492     260863492774290665230282703014708894052,            // 12^225
1493     313389656266867868879861721401276560157,            // 12^234
1494     188246112191795662327951607127115677904,            // 12^243
1495     226150404435492799169987273137391228527,            // 12^252
1496     271686914703601365116141326731156710883,            // 12^261
1497     326392428107359965184387801150473482685,            // 12^270
1498     196056584547032659751107943421776414785,            // 12^279
1499 ];
1500 const BASE12_LARGE_EXPONENT: [i32; 68] = [
1501     -1289,                                              // 12^-324
1502     -1257,                                              // 12^-315
1503     -1224,                                              // 12^-306
1504     -1192,                                              // 12^-297
1505     -1160,                                              // 12^-288
1506     -1128,                                              // 12^-279
1507     -1095,                                              // 12^-270
1508     -1063,                                              // 12^-261
1509     -1031,                                              // 12^-252
1510     -999,                                               // 12^-243
1511     -966,                                               // 12^-234
1512     -934,                                               // 12^-225
1513     -902,                                               // 12^-216
1514     -870,                                               // 12^-207
1515     -837,                                               // 12^-198
1516     -805,                                               // 12^-189
1517     -773,                                               // 12^-180
1518     -741,                                               // 12^-171
1519     -708,                                               // 12^-162
1520     -676,                                               // 12^-153
1521     -644,                                               // 12^-144
1522     -611,                                               // 12^-135
1523     -579,                                               // 12^-126
1524     -547,                                               // 12^-117
1525     -515,                                               // 12^-108
1526     -482,                                               // 12^-99
1527     -450,                                               // 12^-90
1528     -418,                                               // 12^-81
1529     -386,                                               // 12^-72
1530     -353,                                               // 12^-63
1531     -321,                                               // 12^-54
1532     -289,                                               // 12^-45
1533     -257,                                               // 12^-36
1534     -224,                                               // 12^-27
1535     -192,                                               // 12^-18
1536     -160,                                               // 12^-9
1537     -127,                                               // 12^0
1538     -95,                                                // 12^9
1539     -63,                                                // 12^18
1540     -31,                                                // 12^27
1541     2,                                                  // 12^36
1542     34,                                                 // 12^45
1543     66,                                                 // 12^54
1544     98,                                                 // 12^63
1545     131,                                                // 12^72
1546     163,                                                // 12^81
1547     195,                                                // 12^90
1548     227,                                                // 12^99
1549     260,                                                // 12^108
1550     292,                                                // 12^117
1551     324,                                                // 12^126
1552     356,                                                // 12^135
1553     389,                                                // 12^144
1554     421,                                                // 12^153
1555     453,                                                // 12^162
1556     486,                                                // 12^171
1557     518,                                                // 12^180
1558     550,                                                // 12^189
1559     582,                                                // 12^198
1560     615,                                                // 12^207
1561     647,                                                // 12^216
1562     679,                                                // 12^225
1563     711,                                                // 12^234
1564     744,                                                // 12^243
1565     776,                                                // 12^252
1566     808,                                                // 12^261
1567     840,                                                // 12^270
1568     873,                                                // 12^279
1569 ];
1570 const BASE12_SMALL_INT_POWERS: [u128; 9] = [1, 12, 144, 1728, 20736, 248832, 2985984, 35831808, 429981696];
1571 const BASE12_STEP: i32 = 9;
1572 const BASE12_BIAS: i32 = 324;
1573 
1574 // BASE13
1575 
1576 const BASE13_SMALL_MANTISSA: [u128; 8] = [
1577     170141183460469231731687303715884105728,            // 13^0
1578     276479423123262501563991868538311671808,            // 13^1
1579     224639531287650782520743393187378233344,            // 13^2
1580     182519619171216260798104006964744814592,            // 13^3
1581     296594381153226423796919011317710323712,            // 13^4
1582     240982934686996469334996696695639638016,            // 13^5
1583     195798634433184631334684816065207205888,            // 13^6
1584     318172780953925025918862826105961709568,            // 13^7
1585 ];
1586 const BASE13_SMALL_EXPONENT: [i32; 8] = [
1587     -127,                                               // 13^0
1588     -124,                                               // 13^1
1589     -120,                                               // 13^2
1590     -116,                                               // 13^3
1591     -113,                                               // 13^4
1592     -109,                                               // 13^5
1593     -105,                                               // 13^6
1594     -102,                                               // 13^7
1595 ];
1596 const BASE13_LARGE_MANTISSA: [u128; 74] = [
1597     234492264952419818661296823055466035238,            // 13^-312
1598     178145751691013993109826848158654507171,            // 13^-304
1599     270677660536016922109887166011364690074,            // 13^-296
1600     205636101949623162244352604410701629545,            // 13^-288
1601     312446962496257587924386799659895562352,            // 13^-280
1602     237368592984352411701605597109952160960,            // 13^-272
1603     180330922359490147340520816471555077038,            // 13^-264
1604     273997845714729128559081401928980460360,            // 13^-256
1605     208158474636564731932432542641850208607,            // 13^-248
1606     316279498110609430339960234785638219567,            // 13^-240
1607     240280202619066059925234911435300433349,            // 13^-232
1608     182542896759209079117924981191278218615,            // 13^-224
1609     277358756934885281135534847026826478882,            // 13^-216
1610     210711787240726612911538723377341283448,            // 13^-208
1611     320159044357159213189440578296814412270,            // 13^-200
1612     243227526627608078053980201967728671175,            // 13^-192
1613     184782003669985976085437039910686134984,            // 13^-184
1614     280760893750083272032555777889582843511,            // 13^-176
1615     213296419277190995686832685182416132955,            // 13^-168
1616     324086177877525444638594829459150002632,            // 13^-160
1617     246211003089480177174216643591955743445,            // 13^-152
1618     187048575904513609075482455349961378053,            // 13^-144
1619     284204761841543230201034707437221523825,            // 13^-136
1620     215912754916246372204794564138901211197,            // 13^-128
1621     328061482386525623150638173263346085618,            // 13^-120
1622     249231075457753005677502945704601914895,            // 13^-112
1623     189342950357830398121128390896356453239,            // 13^-104
1624     287690873093270135400938070638952191684,            // 13^-96
1625     218561183040489207765436578950529361150,            // 13^-88
1626     332085548758937481126223466223271077691,            // 13^-80
1627     252288192624979397908801362020362227394,            // 13^-72
1628     191665468057395263450492571375008762286,            // 13^-64
1629     291219745668138391592456499213129019442,            // 13^-56
1630     221242097302626033221832363181059870585,            // 13^-48
1631     336158975117324458944453423021025623710,            // 13^-40
1632     255382808989916127627430380985009698372,            // 13^-32
1633     194016474213776704407345321083633835842,            // 13^-24
1634     294791904084909668600573533146696407742,            // 13^-16
1635     223955896183984548959338021657683010637,            // 13^-8
1636     170141183460469231731687303715884105728,            // 13^0
1637     258515384525064083559076046211093889024,            // 13^8
1638     196396318271963640537903969427202768896,            // 13^16
1639     298407879296195459704416306334760173568,            // 13^24
1640     226702983053742437531808354380178063872,            // 13^32
1641     172228168527856562581024588413877561828,            // 13^40
1642     261686384845036905964465455013477410965,            // 13^48
1643     198805353963305641500281734389939339052,            // 13^56
1644     302068208767375943221882620634577632307,            // 13^64
1645     229483766228882688509711411881831930515,            // 13^72
1646     174340752962680465097022527378326959423,            // 13^80
1647     264896281275768246289732905498826672107,            // 13^88
1648     201243939358090266003114541899396801267,            // 13^96
1649     305773436556486878301580275426022079145,            // 13^104
1650     232298659034884347081172590621418853088,            // 13^112
1651     176479250771793883849064971202097683281,            // 13^120
1652     268145550924567936613388404500729180677,            // 13^128
1653     203712436918765324677453955129179600235,            // 13^136
1654     309524113395086409019191949184662333574,            // 13^144
1655     235148079867157707257686510259099274415,            // 13^152
1656     178643979813719299400243488890704650366,            // 13^160
1657     271434676751037481783657313824389119896,            // 13^168
1658     206211213553813977645157972930830162165,            // 13^176
1659     313320796770113796525378889251061848013,            // 13^184
1660     238032452253233081187768481790039531230,            // 13^192
1661     180835261845894060934288352757379708280,            // 13^200
1662     274764147638855414866553566635921015415,            // 13^208
1663     208740640672290674581982064710037218783,            // 13^216
1664     317164051006752246428908041221997358677,            // 13^224
1665     240952204915712388090624317255539471706,            // 13^232
1666     183053422572495239382420468754129441919,            // 13^240
1667     278134458468443185818361944895170594350,            // 13^248
1668     211301094239026043298793364640604498188,            // 13^256
1669     321054447352308147843744474962905446408,            // 13^264
1670     243907771835992919704646129069158162971,            // 13^272
1671 ];
1672 const BASE13_LARGE_EXPONENT: [i32; 74] = [
1673     -1282,                                              // 13^-312
1674     -1252,                                              // 13^-304
1675     -1223,                                              // 13^-296
1676     -1193,                                              // 13^-288
1677     -1164,                                              // 13^-280
1678     -1134,                                              // 13^-272
1679     -1104,                                              // 13^-264
1680     -1075,                                              // 13^-256
1681     -1045,                                              // 13^-248
1682     -1016,                                              // 13^-240
1683     -986,                                               // 13^-232
1684     -956,                                               // 13^-224
1685     -927,                                               // 13^-216
1686     -897,                                               // 13^-208
1687     -868,                                               // 13^-200
1688     -838,                                               // 13^-192
1689     -808,                                               // 13^-184
1690     -779,                                               // 13^-176
1691     -749,                                               // 13^-168
1692     -720,                                               // 13^-160
1693     -690,                                               // 13^-152
1694     -660,                                               // 13^-144
1695     -631,                                               // 13^-136
1696     -601,                                               // 13^-128
1697     -572,                                               // 13^-120
1698     -542,                                               // 13^-112
1699     -512,                                               // 13^-104
1700     -483,                                               // 13^-96
1701     -453,                                               // 13^-88
1702     -424,                                               // 13^-80
1703     -394,                                               // 13^-72
1704     -364,                                               // 13^-64
1705     -335,                                               // 13^-56
1706     -305,                                               // 13^-48
1707     -276,                                               // 13^-40
1708     -246,                                               // 13^-32
1709     -216,                                               // 13^-24
1710     -187,                                               // 13^-16
1711     -157,                                               // 13^-8
1712     -127,                                               // 13^0
1713     -98,                                                // 13^8
1714     -68,                                                // 13^16
1715     -39,                                                // 13^24
1716     -9,                                                 // 13^32
1717     21,                                                 // 13^40
1718     50,                                                 // 13^48
1719     80,                                                 // 13^56
1720     109,                                                // 13^64
1721     139,                                                // 13^72
1722     169,                                                // 13^80
1723     198,                                                // 13^88
1724     228,                                                // 13^96
1725     257,                                                // 13^104
1726     287,                                                // 13^112
1727     317,                                                // 13^120
1728     346,                                                // 13^128
1729     376,                                                // 13^136
1730     405,                                                // 13^144
1731     435,                                                // 13^152
1732     465,                                                // 13^160
1733     494,                                                // 13^168
1734     524,                                                // 13^176
1735     553,                                                // 13^184
1736     583,                                                // 13^192
1737     613,                                                // 13^200
1738     642,                                                // 13^208
1739     672,                                                // 13^216
1740     701,                                                // 13^224
1741     731,                                                // 13^232
1742     761,                                                // 13^240
1743     790,                                                // 13^248
1744     820,                                                // 13^256
1745     849,                                                // 13^264
1746     879,                                                // 13^272
1747 ];
1748 const BASE13_SMALL_INT_POWERS: [u128; 8] = [1, 13, 169, 2197, 28561, 371293, 4826809, 62748517];
1749 const BASE13_STEP: i32 = 8;
1750 const BASE13_BIAS: i32 = 312;
1751 
1752 // BASE14
1753 
1754 const BASE14_SMALL_MANTISSA: [u128; 8] = [
1755     170141183460469231731687303715884105728,            // 14^0
1756     297747071055821155530452781502797185024,            // 14^1
1757     260528687173843511089146183814947536896,            // 14^2
1758     227962601277113072203002910838079094784,            // 14^3
1759     199467276117473938177627546983319207936,            // 14^4
1760     174533866602789695905424103610404306944,            // 14^5
1761     305434266554881967834492181318207537152,            // 14^6
1762     267254983235521721855180658653431595008,            // 14^7
1763 ];
1764 const BASE14_SMALL_EXPONENT: [i32; 8] = [
1765     -127,                                               // 14^0
1766     -124,                                               // 14^1
1767     -120,                                               // 14^2
1768     -116,                                               // 14^3
1769     -112,                                               // 14^4
1770     -108,                                               // 14^5
1771     -105,                                               // 14^6
1772     -101,                                               // 14^7
1773 ];
1774 const BASE14_LARGE_MANTISSA: [u128; 72] = [
1775     251548413169278560512334209582633427955,            // 14^-304
1776     172868555043538834443100066630384298338,            // 14^-296
1777     237596707101714066585640360644079693184,            // 14^-288
1778     326561387705008590881101164026582541311,            // 14^-280
1779     224418808746721891131396635947419054595,            // 14^-272
1780     308449214239576126269380201889590576494,            // 14^-264
1781     211971800172033630882960469392933087940,            // 14^-256
1782     291341601754078780972414349774563326428,            // 14^-248
1783     200215143815698040798730279921859793515,            // 14^-240
1784     275182833977670641254081992250398936156,            // 14^-232
1785     189110550462878905579110756278883461660,            // 14^-224
1786     259920284847963995399800125815215983072,            // 14^-216
1787     178621854545095883446307559621296276382,            // 14^-208
1788     245504247117858718392171207907774065824,            // 14^-200
1789     337429792711562885676838629607664070711,            // 14^-192
1790     231887770468403152813044191455947332680,            // 14^-184
1791     318714821597104302344272129046782646031,            // 14^-176
1792     219026508600450572879143037057044702127,            // 14^-168
1793     301037844611736789461197056572315300910,            // 14^-160
1794     206878574807117564156377107253687360168,            // 14^-152
1795     284341291171704802743493772571841275116,            // 14^-144
1796     195404405556671025581418948604574579552,            // 14^-136
1797     268570783748031302676865943988466296381,            // 14^-128
1798     184566631641558957302915986868221103411,            // 14^-120
1799     253674960769150428442670675281025859157,            // 14^-112
1800     174329956473941702727882427159635204541,            // 14^-104
1801     239605309345945263344621501916001364416,            // 14^-96
1802     329322082262710237520775170056072850605,            // 14^-88
1803     226316007274407653805017736090948441653,            // 14^-80
1804     311056791556242112413125050076207081650,            // 14^-72
1805     213763773801352511153375590062662203372,            // 14^-64
1806     293804554217770280277607620947080882230,            // 14^-56
1807     201907728667158642949418150287074186439,            // 14^-48
1808     277509182960549548157083678768414391770,            // 14^-40
1809     190709258966464876623809832149485832940,            // 14^-32
1810     262117606830390855604604612394616145902,            // 14^-24
1811     180131893393211845729384454981934494079,            // 14^-16
1812     247579698363561878555441197267606485702,            // 14^-8
1813     170141183460469231731687303715884105728,            // 14^0
1814     233848110331081506623283076321752645632,            // 14^8
1815     321409182616407632938244080939940446208,            // 14^16
1816     220878121537715117784741212850409701376,            // 14^24
1817     303582767467198764972828371186555551744,            // 14^32
1818     208627491173467029036775346642092064768,            // 14^40
1819     286745064197610355009611023687762970225,            // 14^48
1820     197056321243220373650760726805477101625,            // 14^56
1821     270841235580262673674173137819514560921,            // 14^64
1822     186126926626483659918254253754028720893,            // 14^72
1823     255819485841579348845580110620374327715,            // 14^80
1824     175803712344053086257499345217280929659,            // 14^88
1825     241630891972710985114650364591580944199,            // 14^96
1826     332106115263742508816700348007180790592,            // 14^104
1827     228229244396512279339912293302076319311,            // 14^112
1828     313686412889065357315780098042512623701,            // 14^120
1829     215570896471654994597359469530054904893,            // 14^128
1830     296288328063653274657691113306601058431,            // 14^136
1831     203614622343740041422835873088956724196,            // 14^144
1832     279855198502973302491761604313633635665,            // 14^152
1833     192321482680456518790460799730877816261,            // 14^160
1834     264333504599995236391965677440014878764,            // 14^168
1835     181654697853512422889189735564216996803,            // 14^176
1836     249672695121914450880056351845343996855,            // 14^184
1837     171579528154314464133715598246382584383,            // 14^192
1838     235825022574310344970824197408281461914,            // 14^200
1839     324126321306564057111299587260117144567,            // 14^208
1840     222745387696552489161405202381218740358,            // 14^216
1841     306149204668634768979587047598946613225,            // 14^224
1842     210391192582005308252369450519735221250,            // 14^232
1843     289169158312782474283830561810879736710,            // 14^240
1844     198722201944671478335130298919429936059,            // 14^248
1845     273130881427012463325938578210122255044,            // 14^256
1846     187700412080445632409314398956810353518,            // 14^264
1847 ];
1848 const BASE14_LARGE_EXPONENT: [i32; 72] = [
1849     -1285,                                              // 14^-304
1850     -1254,                                              // 14^-296
1851     -1224,                                              // 14^-288
1852     -1194,                                              // 14^-280
1853     -1163,                                              // 14^-272
1854     -1133,                                              // 14^-264
1855     -1102,                                              // 14^-256
1856     -1072,                                              // 14^-248
1857     -1041,                                              // 14^-240
1858     -1011,                                              // 14^-232
1859     -980,                                               // 14^-224
1860     -950,                                               // 14^-216
1861     -919,                                               // 14^-208
1862     -889,                                               // 14^-200
1863     -859,                                               // 14^-192
1864     -828,                                               // 14^-184
1865     -798,                                               // 14^-176
1866     -767,                                               // 14^-168
1867     -737,                                               // 14^-160
1868     -706,                                               // 14^-152
1869     -676,                                               // 14^-144
1870     -645,                                               // 14^-136
1871     -615,                                               // 14^-128
1872     -584,                                               // 14^-120
1873     -554,                                               // 14^-112
1874     -523,                                               // 14^-104
1875     -493,                                               // 14^-96
1876     -463,                                               // 14^-88
1877     -432,                                               // 14^-80
1878     -402,                                               // 14^-72
1879     -371,                                               // 14^-64
1880     -341,                                               // 14^-56
1881     -310,                                               // 14^-48
1882     -280,                                               // 14^-40
1883     -249,                                               // 14^-32
1884     -219,                                               // 14^-24
1885     -188,                                               // 14^-16
1886     -158,                                               // 14^-8
1887     -127,                                               // 14^0
1888     -97,                                                // 14^8
1889     -67,                                                // 14^16
1890     -36,                                                // 14^24
1891     -6,                                                 // 14^32
1892     25,                                                 // 14^40
1893     55,                                                 // 14^48
1894     86,                                                 // 14^56
1895     116,                                                // 14^64
1896     147,                                                // 14^72
1897     177,                                                // 14^80
1898     208,                                                // 14^88
1899     238,                                                // 14^96
1900     268,                                                // 14^104
1901     299,                                                // 14^112
1902     329,                                                // 14^120
1903     360,                                                // 14^128
1904     390,                                                // 14^136
1905     421,                                                // 14^144
1906     451,                                                // 14^152
1907     482,                                                // 14^160
1908     512,                                                // 14^168
1909     543,                                                // 14^176
1910     573,                                                // 14^184
1911     604,                                                // 14^192
1912     634,                                                // 14^200
1913     664,                                                // 14^208
1914     695,                                                // 14^216
1915     725,                                                // 14^224
1916     756,                                                // 14^232
1917     786,                                                // 14^240
1918     817,                                                // 14^248
1919     847,                                                // 14^256
1920     878,                                                // 14^264
1921 ];
1922 const BASE14_SMALL_INT_POWERS: [u128; 8] = [1, 14, 196, 2744, 38416, 537824, 7529536, 105413504];
1923 const BASE14_STEP: i32 = 8;
1924 const BASE14_BIAS: i32 = 304;
1925 
1926 // BASE15
1927 
1928 const BASE15_SMALL_MANTISSA: [u128; 8] = [
1929     170141183460469231731687303715884105728,            // 15^0
1930     319014718988379809496913694467282698240,            // 15^1
1931     299076299051606071403356588563077529600,            // 15^2
1932     280384030360880691940646801777885184000,            // 15^3
1933     262860028463325648694356376666767360000,            // 15^4
1934     246431276684367795650959103125094400000,            // 15^5
1935     231029321891594808422774159179776000000,            // 15^6
1936     216589989273370132896350774231040000000,            // 15^7
1937 ];
1938 const BASE15_SMALL_EXPONENT: [i32; 8] = [
1939     -127,                                               // 15^0
1940     -124,                                               // 15^1
1941     -120,                                               // 15^2
1942     -116,                                               // 15^3
1943     -112,                                               // 15^4
1944     -108,                                               // 15^5
1945     -104,                                               // 15^6
1946     -100,                                               // 15^7
1947 ];
1948 const BASE15_LARGE_MANTISSA: [u128; 70] = [
1949     250900630150587280377850342682701393565,            // 15^-296
1950     299434584015762656519487081521438784545,            // 15^-288
1951     178678447421354466262014715708770369510,            // 15^-280
1952     213241818261213966824485132704511196490,            // 15^-272
1953     254491091184140684406056053498886823977,            // 15^-264
1954     303719580053283976738045342609656736770,            // 15^-256
1955     181235388002241613446887230826356048960,            // 15^-248
1956     216293370737313530448778168911616746705,            // 15^-240
1957     258132932759965856034693127408739651425,            // 15^-232
1958     308065895631104646134849028190499821539,            // 15^-224
1959     183828919146951883093674448351327494412,            // 15^-216
1960     219388591817396682923135459647357436704,            // 15^-208
1961     261826890148575264294539329193196343516,            // 15^-200
1962     312474408249691315911417866816293319027,            // 15^-192
1963     186459564477102023710796186076704586060,            // 15^-184
1964     222528106411894691985532295229724475420,            // 15^-176
1965     265573709142416387133758214804806317848,            // 15^-168
1966     316946007966797681726272939583274683428,            // 15^-160
1967     189127855107486501747742000280219617523,            // 15^-152
1968     225712548373888955751123878842649157480,            // 15^-144
1969     269374146206443663446975509775551676690,            // 15^-136
1970     321481597577162915672598741300570427622,            // 15^-128
1971     191834329753307055373436045708607941890,            // 15^-120
1972     228942560627082928532238637834630336646,            // 15^-112
1973     273228968630845173556739192069109710925,            // 15^-104
1974     326082092794781635112624979076905003855,            // 15^-96
1975     194579534838936734374686465136944546456,            // 15^-88
1976     232218795295605362158733969001967701715,            // 15^-80
1977     277138954685954882938577351637270128950,            // 15^-72
1978     330748422437782207809506145002547658085,            // 15^-64
1979     197364024608240385117657735223630441823,            // 15^-56
1980     235541913835671069456466721167496749113,            // 15^-48
1981     281104893779381725235703590002221275596,            // 15^-40
1982     335481528615950719408183659471355674975,            // 15^-32
1983     200188361236473853754168248068850933442,            // 15^-24
1984     238912587169125791566529710613345919103,            // 15^-16
1985     285127586615387248178740525206042107172,            // 15^-8
1986     170141183460469231731687303715884105728,            // 15^0
1987     203053114943784499590328850841600000000,            // 15^8
1988     242331495818902131179520000000000000000,            // 15^16
1989     289207845356544000000000000000000000000,            // 15^24
1990     172575953309595678001642227172851562500,            // 15^32
1991     205958864110335933831952325359648803271,            // 15^40
1992     245799330046413899594233809090775284541,            // 15^48
1993     293346493787707294402529081970820087350,            // 15^56
1994     175045565423820113080636775231191731391,            // 15^64
1995     208906195393080226844550976655564036201,            // 15^72
1996     249316789990916616866725045444974174010,            // 15^80
1997     297544367482333459204270734183314844936,            // 15^88
1998     177550518406095745907734479894927853604,            // 15^96
1999     211895703844201159681805788312089434384,            // 15^104
2000     252884585810862301272632571838697691236,            // 15^112
2001     301802313971178147521594347169174498450,            // 15^120
2002     180091317994529147280371081412973024665,            // 15^128
2003     214927993031252433012289596290523334542,            // 15^136
2004     256503437827277086943219190518379691262,            // 15^144
2005     306121192913408770879770801728425641044,            // 15^152
2006     182668477164486370906358954938714362551,            // 15^160
2007     218003675159015088778073023304915283497,            // 15^168
2008     260174076669190616934963528529542450091,            // 15^176
2009     310501876270165601037714752361776484586,            // 15^184
2010     185282516232160242762660936045505469826,            // 15^192
2011     221123371193098747019724833334214306438,            // 15^200
2012     263897243421146573236258451562349376134,            // 15^208
2013     314945248480606581688897076801472259251,            // 15^216
2014     187933962959619728504626775329093970226,            // 15^224
2015     224287710985311612370215929865332425589,            // 15^232
2016     267673689772824125386430153566188172461,            // 15^240
2017     319452206640471392649554807130291119305,            // 15^248
2018     190623352661362587893902772482928415571,            // 15^256
2019 ];
2020 const BASE15_LARGE_EXPONENT: [i32; 70] = [
2021     -1284,                                              // 15^-296
2022     -1253,                                              // 15^-288
2023     -1221,                                              // 15^-280
2024     -1190,                                              // 15^-272
2025     -1159,                                              // 15^-264
2026     -1128,                                              // 15^-256
2027     -1096,                                              // 15^-248
2028     -1065,                                              // 15^-240
2029     -1034,                                              // 15^-232
2030     -1003,                                              // 15^-224
2031     -971,                                               // 15^-216
2032     -940,                                               // 15^-208
2033     -909,                                               // 15^-200
2034     -878,                                               // 15^-192
2035     -846,                                               // 15^-184
2036     -815,                                               // 15^-176
2037     -784,                                               // 15^-168
2038     -753,                                               // 15^-160
2039     -721,                                               // 15^-152
2040     -690,                                               // 15^-144
2041     -659,                                               // 15^-136
2042     -628,                                               // 15^-128
2043     -596,                                               // 15^-120
2044     -565,                                               // 15^-112
2045     -534,                                               // 15^-104
2046     -503,                                               // 15^-96
2047     -471,                                               // 15^-88
2048     -440,                                               // 15^-80
2049     -409,                                               // 15^-72
2050     -378,                                               // 15^-64
2051     -346,                                               // 15^-56
2052     -315,                                               // 15^-48
2053     -284,                                               // 15^-40
2054     -253,                                               // 15^-32
2055     -221,                                               // 15^-24
2056     -190,                                               // 15^-16
2057     -159,                                               // 15^-8
2058     -127,                                               // 15^0
2059     -96,                                                // 15^8
2060     -65,                                                // 15^16
2061     -34,                                                // 15^24
2062     -2,                                                 // 15^32
2063     29,                                                 // 15^40
2064     60,                                                 // 15^48
2065     91,                                                 // 15^56
2066     123,                                                // 15^64
2067     154,                                                // 15^72
2068     185,                                                // 15^80
2069     216,                                                // 15^88
2070     248,                                                // 15^96
2071     279,                                                // 15^104
2072     310,                                                // 15^112
2073     341,                                                // 15^120
2074     373,                                                // 15^128
2075     404,                                                // 15^136
2076     435,                                                // 15^144
2077     466,                                                // 15^152
2078     498,                                                // 15^160
2079     529,                                                // 15^168
2080     560,                                                // 15^176
2081     591,                                                // 15^184
2082     623,                                                // 15^192
2083     654,                                                // 15^200
2084     685,                                                // 15^208
2085     716,                                                // 15^216
2086     748,                                                // 15^224
2087     779,                                                // 15^232
2088     810,                                                // 15^240
2089     841,                                                // 15^248
2090     873,                                                // 15^256
2091 ];
2092 const BASE15_SMALL_INT_POWERS: [u128; 8] = [1, 15, 225, 3375, 50625, 759375, 11390625, 170859375];
2093 const BASE15_STEP: i32 = 8;
2094 const BASE15_BIAS: i32 = 296;
2095 
2096 // BASE17
2097 
2098 const BASE17_SMALL_MANTISSA: [u128; 8] = [
2099     170141183460469231731687303715884105728,            // 17^0
2100     180775007426748558714917760198126862336,            // 17^1
2101     192073445390920343634600120210509791232,            // 17^2
2102     204078035727852865111762627723666653184,            // 17^3
2103     216832912960843669181247791956395819008,            // 17^4
2104     230384970020896398505075778953670557696,            // 17^5
2105     244784030647202423411643015138274967552,            // 17^6
2106     260083032562652574874870703584417153024,            // 17^7
2107 ];
2108 const BASE17_SMALL_EXPONENT: [i32; 8] = [
2109     -127,                                               // 17^0
2110     -123,                                               // 17^1
2111     -119,                                               // 17^2
2112     -115,                                               // 17^3
2113     -111,                                               // 17^4
2114     -107,                                               // 17^5
2115     -103,                                               // 17^6
2116     -99,                                                // 17^7
2117 ];
2118 const BASE17_LARGE_MANTISSA: [u128; 67] = [
2119     242357519372662728375060373498171096966,            // 17^-280
2120     196814917627041423628769027913700117445,            // 17^-272
2121     319660903452112403161269325795427500295,            // 17^-264
2122     259591839957616255097162958982226744872,            // 17^-256
2123     210810651677570156300974624360660789801,            // 17^-248
2124     171196178077006380843936555487576333355,            // 17^-240
2125     278051712804343163076920967240438328697,            // 17^-232
2126     225801638394791143591435147984466155468,            // 17^-224
2127     183370134237042583472660416437030762483,            // 17^-216
2128     297824288336843871393537735572731133862,            // 17^-208
2129     241858651334916724628852435647948831754,            // 17^-200
2130     196409794352921881357331916371145369426,            // 17^-192
2131     319002914345514633220184430371226516661,            // 17^-184
2132     259057496842743054458415989246502258570,            // 17^-176
2133     210376719623757394611528557965027181599,            // 17^-168
2134     170843788344482468189688357828247614648,            // 17^-160
2135     277479371939006412580670873073737346072,            // 17^-152
2136     225336848935989032116058614991615739830,            // 17^-144
2137     182992685667322765043701960137104341962,            // 17^-136
2138     297211247657519026846228781764556419486,            // 17^-128
2139     241360810165739638162969982622013142483,            // 17^-120
2140     196005504983412884662857445298594989473,            // 17^-112
2141     318346279641847361755138868550752397781,            // 17^-104
2142     258524253618237975606418771469177669493,            // 17^-96
2143     209943680774466452613153056292584472116,            // 17^-88
2144     170492123969995067410761994182235561833,            // 17^-80
2145     276908209178500704519431941303594138118,            // 17^-72
2146     224873016198504574919954139464723650485,            // 17^-64
2147     182616014036679619640392724861134514431,            // 17^-56
2148     296599468859408121472112670217716316867,            // 17^-48
2149     240863993751428088431121063565557553364,            // 17^-40
2150     195602047802007523394399179976814437447,            // 17^-32
2151     317690996553211397504541477525504659745,            // 17^-24
2152     257992108020089771434235624403421929746,            // 17^-16
2153     209511533291127649202286079418781645629,            // 17^-8
2154     170141183460469231731687303715884105728,            // 17^0
2155     276338222097818360804550122558443225088,            // 17^8
2156     224410138213025296601555690180338253824,            // 17^16
2157     182240117745863932172015090234506084352,            // 17^24
2158     295988949345058405730513287165118905920,            // 17^32
2159     240368199982629535993820184805831872348,            // 17^40
2160     195199421095732140407812372336079928061,            // 17^48
2161     317037062297446153078380490386689107619,            // 17^56
2162     257461057788947429232455063849242347039,            // 17^64
2163     209080275338955809947349984471742343690,            // 17^72
2164     339581930651806711314806824645491109283,            // 17^80
2165     275769408276943332346622203534744539377,            // 17^88
2166     223948213014292349032159641795245781843,            // 17^96
2167     181864995198918377644202761532864575404,            // 17^104
2168     295379686522363719531147616048257012833,            // 17^112
2169     239873426754333326759263874720553852658,            // 17^120
2170     194797623155139058727680168785666503632,            // 17^128
2171     316384474098117832632118586933880356805,            // 17^136
2172     256931100670110578075784008065054807112,            // 17^144
2173     208649905086942477070838417411852870460,            // 17^152
2174     338882936158725697632383782036927673666,            // 17^160
2175     275201765300840924300371814765015192837,            // 17^168
2176     223487238641092167380922055560365365575,            // 17^176
2177     181490644803170745141604509031893001355,            // 17^184
2178     294771677804553486829405243638525556429,            // 17^192
2179     239379671965861754658715697694088165244,            // 17^200
2180     194396652274299323679629299288271234884,            // 17^208
2181     315733229184507643855046849844924656388,            // 17^216
2182     256402234413519915955050497805856036474,            // 17^224
2183     208220420707848135466354215936729966175,            // 17^232
2184     338185380473947645648707735110624890484,            // 17^240
2185     274635290759447542459052551448368297186,            // 17^248
2186 ];
2187 const BASE17_LARGE_EXPONENT: [i32; 67] = [
2188     -1272,                                              // 17^-280
2189     -1239,                                              // 17^-272
2190     -1207,                                              // 17^-264
2191     -1174,                                              // 17^-256
2192     -1141,                                              // 17^-248
2193     -1108,                                              // 17^-240
2194     -1076,                                              // 17^-232
2195     -1043,                                              // 17^-224
2196     -1010,                                              // 17^-216
2197     -978,                                               // 17^-208
2198     -945,                                               // 17^-200
2199     -912,                                               // 17^-192
2200     -880,                                               // 17^-184
2201     -847,                                               // 17^-176
2202     -814,                                               // 17^-168
2203     -781,                                               // 17^-160
2204     -749,                                               // 17^-152
2205     -716,                                               // 17^-144
2206     -683,                                               // 17^-136
2207     -651,                                               // 17^-128
2208     -618,                                               // 17^-120
2209     -585,                                               // 17^-112
2210     -553,                                               // 17^-104
2211     -520,                                               // 17^-96
2212     -487,                                               // 17^-88
2213     -454,                                               // 17^-80
2214     -422,                                               // 17^-72
2215     -389,                                               // 17^-64
2216     -356,                                               // 17^-56
2217     -324,                                               // 17^-48
2218     -291,                                               // 17^-40
2219     -258,                                               // 17^-32
2220     -226,                                               // 17^-24
2221     -193,                                               // 17^-16
2222     -160,                                               // 17^-8
2223     -127,                                               // 17^0
2224     -95,                                                // 17^8
2225     -62,                                                // 17^16
2226     -29,                                                // 17^24
2227     3,                                                  // 17^32
2228     36,                                                 // 17^40
2229     69,                                                 // 17^48
2230     101,                                                // 17^56
2231     134,                                                // 17^64
2232     167,                                                // 17^72
2233     199,                                                // 17^80
2234     232,                                                // 17^88
2235     265,                                                // 17^96
2236     298,                                                // 17^104
2237     330,                                                // 17^112
2238     363,                                                // 17^120
2239     396,                                                // 17^128
2240     428,                                                // 17^136
2241     461,                                                // 17^144
2242     494,                                                // 17^152
2243     526,                                                // 17^160
2244     559,                                                // 17^168
2245     592,                                                // 17^176
2246     625,                                                // 17^184
2247     657,                                                // 17^192
2248     690,                                                // 17^200
2249     723,                                                // 17^208
2250     755,                                                // 17^216
2251     788,                                                // 17^224
2252     821,                                                // 17^232
2253     853,                                                // 17^240
2254     886,                                                // 17^248
2255 ];
2256 const BASE17_SMALL_INT_POWERS: [u128; 8] = [1, 17, 289, 4913, 83521, 1419857, 24137569, 410338673];
2257 const BASE17_STEP: i32 = 8;
2258 const BASE17_BIAS: i32 = 280;
2259 
2260 // BASE18
2261 
2262 const BASE18_SMALL_MANTISSA: [u128; 7] = [
2263     170141183460469231731687303715884105728,            // 18^0
2264     191408831393027885698148216680369618944,            // 18^1
2265     215334935317156371410416743765415821312,            // 18^2
2266     242251802231800917836718836736092798976,            // 18^3
2267     272533277510776032566308691328104398848,            // 18^4
2268     306599937199623036637097277744117448704,            // 18^5
2269     172462464674787958108367218731066064896,            // 18^6
2270 ];
2271 const BASE18_SMALL_EXPONENT: [i32; 7] = [
2272     -127,                                               // 18^0
2273     -123,                                               // 18^1
2274     -119,                                               // 18^2
2275     -115,                                               // 18^3
2276     -111,                                               // 18^4
2277     -107,                                               // 18^5
2278     -102,                                               // 18^6
2279 ];
2280 const BASE18_LARGE_MANTISSA: [u128; 75] = [
2281     259764989429046712145887613713888779974,            // 18^-273
2282     296222660952677279411722167462707735076,            // 18^-266
2283     337797118290463899238253918549284876092,            // 18^-259
2284     192603247770383575639211190527648274245,            // 18^-252
2285     219634857984796466920734002291401705412,            // 18^-245
2286     250460318818255417964791343261171179660,            // 18^-238
2287     285612092170198511649999639102587856294,            // 18^-231
2288     325697370261002112643262654266086944683,            // 18^-224
2289     185704281966673733437923590446998072591,            // 18^-217
2290     211767631486382365261996259087726574961,            // 18^-210
2291     241488937521646207617474790890828249100,            // 18^-203
2292     275381589414827976227270551469877695982,            // 18^-196
2293     314031030021154964119856834958393443507,            // 18^-189
2294     179052434161812488744424286609186187994,            // 18^-182
2295     204182205669996766442639895844185984708,            // 18^-175
2296     232838907258801165579649662968151663564,            // 18^-168
2297     265517538884334791214783518037108753711,            // 18^-161
2298     302782573089615796089597203369720463425,            // 18^-154
2299     172638852694972345186098175788410725025,            // 18^-147
2300     196868486555962367745019627988939060464,            // 18^-140
2301     224498717373391335032231518045098273537,            // 18^-133
2302     256006814417050404626793229969178591795,            // 18^-126
2303     291937031065346039954998156631577529912,            // 18^-119
2304     332910005936047335476283449703688561122,            // 18^-112
2305     189816741726628588213403698819375225722,            // 18^-105
2306     216457269515865090355509585365869594574,            // 18^-98
2307     246836760024792608106756526472045881483,            // 18^-91
2308     281479971709018296242657937208050445965,            // 18^-84
2309     320985312176969416466104839150917967197,            // 18^-77
2310     183017587375374702561553597022155160742,            // 18^-70
2311     208703862874796048578293668364396201854,            // 18^-63
2312     237995173051452727716558620615765508935,            // 18^-56
2313     271397479737933588417468230506889186025,            // 18^-49
2314     309487755838552588810803796052767101096,            // 18^-42
2315     176461975819512133258798291874254633040,            // 18^-35
2316     201228179937237770199942876645925476060,            // 18^-28
2317     229470287934835004924643178169318563534,            // 18^-21
2318     261676138308856451194147028266269550444,            // 18^-14
2319     298402037041419227483658365640566588740,            // 18^-7
2320     170141183460469231731687303715884105728,            // 18^0
2321     194020272759136452871913121072449323008,            // 18^7
2322     221250760550139932836609227367108313088,            // 18^14
2323     252303011164126931290527343657214803968,            // 18^21
2324     287713403941314941508226937857819803648,            // 18^28
2325     328093598350474163167634651360244400128,            // 18^35
2326     187070549727531559196917812917453861026,            // 18^42
2327     213325653114257310428744028742785781912,            // 18^49
2328     243265625417291205836310243227923719532,            // 18^56
2329     277407633098725295421526662764935275289,            // 18^63
2330     316341426247257477645159711999449660471,            // 18^70
2331     180369762796928745579122531717097251784,            // 18^77
2332     205684419630781050995309380627725821797,            // 18^84
2333     234551954955343535589691141355422293223,            // 18^91
2334     267471010551644448060009348077202513313,            // 18^98
2335     305010211912915299914630616083972269987,            // 18^105
2336     173908995182860443486855135343139262701,            // 18^112
2337     198316891856377323275537495574245323224,            // 18^119
2338     226150404435492799169987273137391228527,            // 18^126
2339     257890313566309108293837274983090159159,            // 18^133
2340     294084876820548989626661915132664622178,            // 18^140
2341     335359298992515654651080492391625827617,            // 18^147
2342     191213265769831372286179520084128641258,            // 18^154
2343     218049793855157992570938056229892893589,            // 18^161
2344     248652793041613380567795520750960012282,            // 18^168
2345     283550882549632193861238568804430594202,            // 18^175
2346     323346872605688987884591669129361771279,            // 18^182
2347     184364088525767284952804747951506893851,            // 18^189
2348     210239343674659878049714940191476577896,            // 18^196
2349     239746156543789930881397013133212694240,            // 18^203
2350     273394211439632029990640781047045990695,            // 18^210
2351     311764726184655516350818907233192566650,            // 18^217
2352     177760245875679923341865534533290364422,            // 18^224
2353     202708660472811443153981984577454872377,            // 18^231
2354     231158551948781603682221903513060749406,            // 18^238
2355     263601347936609267755115798860540547258,            // 18^245
2356 ];
2357 const BASE18_LARGE_EXPONENT: [i32; 75] = [
2358     -1266,                                              // 18^-273
2359     -1237,                                              // 18^-266
2360     -1208,                                              // 18^-259
2361     -1178,                                              // 18^-252
2362     -1149,                                              // 18^-245
2363     -1120,                                              // 18^-238
2364     -1091,                                              // 18^-231
2365     -1062,                                              // 18^-224
2366     -1032,                                              // 18^-217
2367     -1003,                                              // 18^-210
2368     -974,                                               // 18^-203
2369     -945,                                               // 18^-196
2370     -916,                                               // 18^-189
2371     -886,                                               // 18^-182
2372     -857,                                               // 18^-175
2373     -828,                                               // 18^-168
2374     -799,                                               // 18^-161
2375     -770,                                               // 18^-154
2376     -740,                                               // 18^-147
2377     -711,                                               // 18^-140
2378     -682,                                               // 18^-133
2379     -653,                                               // 18^-126
2380     -624,                                               // 18^-119
2381     -595,                                               // 18^-112
2382     -565,                                               // 18^-105
2383     -536,                                               // 18^-98
2384     -507,                                               // 18^-91
2385     -478,                                               // 18^-84
2386     -449,                                               // 18^-77
2387     -419,                                               // 18^-70
2388     -390,                                               // 18^-63
2389     -361,                                               // 18^-56
2390     -332,                                               // 18^-49
2391     -303,                                               // 18^-42
2392     -273,                                               // 18^-35
2393     -244,                                               // 18^-28
2394     -215,                                               // 18^-21
2395     -186,                                               // 18^-14
2396     -157,                                               // 18^-7
2397     -127,                                               // 18^0
2398     -98,                                                // 18^7
2399     -69,                                                // 18^14
2400     -40,                                                // 18^21
2401     -11,                                                // 18^28
2402     18,                                                 // 18^35
2403     48,                                                 // 18^42
2404     77,                                                 // 18^49
2405     106,                                                // 18^56
2406     135,                                                // 18^63
2407     164,                                                // 18^70
2408     194,                                                // 18^77
2409     223,                                                // 18^84
2410     252,                                                // 18^91
2411     281,                                                // 18^98
2412     310,                                                // 18^105
2413     340,                                                // 18^112
2414     369,                                                // 18^119
2415     398,                                                // 18^126
2416     427,                                                // 18^133
2417     456,                                                // 18^140
2418     485,                                                // 18^147
2419     515,                                                // 18^154
2420     544,                                                // 18^161
2421     573,                                                // 18^168
2422     602,                                                // 18^175
2423     631,                                                // 18^182
2424     661,                                                // 18^189
2425     690,                                                // 18^196
2426     719,                                                // 18^203
2427     748,                                                // 18^210
2428     777,                                                // 18^217
2429     807,                                                // 18^224
2430     836,                                                // 18^231
2431     865,                                                // 18^238
2432     894,                                                // 18^245
2433 ];
2434 const BASE18_SMALL_INT_POWERS: [u128; 7] = [1, 18, 324, 5832, 104976, 1889568, 34012224];
2435 const BASE18_STEP: i32 = 7;
2436 const BASE18_BIAS: i32 = 273;
2437 
2438 // BASE19
2439 
2440 const BASE19_SMALL_MANTISSA: [u128; 7] = [
2441     170141183460469231731687303715884105728,            // 19^0
2442     202042655359307212681378673162612375552,            // 19^1
2443     239925653239177315059137174380602195968,            // 19^2
2444     284911713221523061632725394576965107712,            // 19^3
2445     338332659450558635688861406060146065408,            // 19^4
2446     200885016548769189940261459848211726336,            // 19^5
2447     238550957151663413054060483569751425024,            // 19^6
2448 ];
2449 const BASE19_SMALL_EXPONENT: [i32; 7] = [
2450     -127,                                               // 19^0
2451     -123,                                               // 19^1
2452     -119,                                               // 19^2
2453     -115,                                               // 19^3
2454     -111,                                               // 19^4
2455     -106,                                               // 19^5
2456     -102,                                               // 19^6
2457 ];
2458 const BASE19_LARGE_MANTISSA: [u128; 74] = [
2459     211773375714873706954526795446522416463,            // 19^-273
2460     176297720171655089222657736919708805072,            // 19^-266
2461     293529685049453215881543661471874663538,            // 19^-259
2462     244358452058655253685245151337508023797,            // 19^-252
2463     203424239979142604035433607238695466107,            // 19^-245
2464     338694414393807804581041366088196084612,            // 19^-238
2465     281957318246159342222500231430112814088,            // 19^-231
2466     234724654242834897063227749239967575385,            // 19^-224
2467     195404267752744776874588226122954622761,            // 19^-217
2468     325341434449269614607198466720898964379,            // 19^-210
2469     270841190386491955899443752473167688523,            // 19^-203
2470     225470667559284387835624717321131334248,            // 19^-196
2471     187700481810335462307725392489901825033,            // 19^-189
2472     312514893872556142260088491662230499613,            // 19^-182
2473     260163314313871975296322899252180920269,            // 19^-175
2474     216581518007204247993872678149555585108,            // 19^-168
2475     180300416551865148993646942230063074210,            // 19^-161
2476     300194037865176954165930472692882676095,            // 19^-154
2477     249906412012854191998973084780461202007,            // 19^-147
2478     208042821933683442841807340743863291908,            // 19^-140
2479     173192097831823827445985218112992713522,            // 19^-133
2480     288358929883670982310136287441393538062,            // 19^-126
2481     240053886651337192078493312543483732688,            // 19^-119
2482     199840762759316398351061941853830886312,            // 19^-112
2483     332728047167428932050765437002481330484,            // 19^-105
2484     276990419380016367557580152018464109110,            // 19^-98
2485     230589795725005243268941857960660823918,            // 19^-91
2486     191962068621409314298003076822671000161,            // 19^-84
2487     319610290416807823632571053703933063036,            // 19^-77
2488     266070110813870135824430347248350305665,            // 19^-70
2489     221498825260546806854707890357129976717,            // 19^-63
2490     184393990898599943457278294759382590034,            // 19^-56
2491     307009699392470911375170613720126268120,            // 19^-49
2492     255580333886495993526502175170654921405,            // 19^-42
2493     212766265035907553834903279232863277537,            // 19^-35
2494     177124283582141234157272719875613305569,            // 19^-28
2495     294905884907949220984741236292709278206,            // 19^-21
2496     245504114948215358970059027289947453449,            // 19^-14
2497     204377984777481442195434041001194890061,            // 19^-7
2498     170141183460469231731687303715884105728,            // 19^0
2499     283279261617600303001696824239079817216,            // 19^7
2500     235825149533115640143913831779140632576,            // 19^14
2501     196320411295724208786653789764804673536,            // 19^21
2502     326866782169983241283381922259938632192,            // 19^28
2503     272111016325296008481488740678554545334,            // 19^35
2504     226527775976573799542251126784141726274,            // 19^42
2505     188580506522192103284103254483314456872,            // 19^49
2506     313980104972594785419533005246072709649,            // 19^56
2507     261383077542535819285819131850454151532,            // 19^63
2508     217596950072905364683647533344696965413,            // 19^70
2509     181145746412467300065049161663171614429,            // 19^77
2510     301601483222404786925353682146130769038,            // 19^84
2511     251078086246727305139312855014591629283,            // 19^91
2512     209018220732132084019166621358085321302,            // 19^98
2513     174004100680832526758226172220060851297,            // 19^105
2514     289710886904423785696066284771374024143,            // 19^112
2515     241179367792317286239104434314982328918,            // 19^119
2516     200777706596478115292553836948931709029,            // 19^126
2517     334288026667806625723834320874258952107,            // 19^133
2518     278289075684203471850125042859239363909,            // 19^140
2519     231670904929322723497179168675130067798,            // 19^147
2520     192862073578757583112120353708241916963,            // 19^154
2521     321108767943438131876044073228689471164,            // 19^161
2522     267317567774791732969648063348207624890,            // 19^168
2523     222537311885602256946640972609673172416,            // 19^175
2524     185258513286308067365753274779077551187,            // 19^182
2525     308449099652072036761706748552096805527,            // 19^189
2526     256778610031103646805005837172547824357,            // 19^196
2527     213763809470930565948441961387708938512,            // 19^203
2528     177954722295557497937779873950595261616,            // 19^210
2529     296288537013515928119667265056482304979,            // 19^217
2530     246655149223317717362685108852956230915,            // 19^224
2531     205336201162591117777390249036062770913,            // 19^231
2532     170938882243688352586356584716130516258,            // 19^238
2533 ];
2534 const BASE19_LARGE_EXPONENT: [i32; 74] = [
2535     -1287,                                              // 19^-273
2536     -1257,                                              // 19^-266
2537     -1228,                                              // 19^-259
2538     -1198,                                              // 19^-252
2539     -1168,                                              // 19^-245
2540     -1139,                                              // 19^-238
2541     -1109,                                              // 19^-231
2542     -1079,                                              // 19^-224
2543     -1049,                                              // 19^-217
2544     -1020,                                              // 19^-210
2545     -990,                                               // 19^-203
2546     -960,                                               // 19^-196
2547     -930,                                               // 19^-189
2548     -901,                                               // 19^-182
2549     -871,                                               // 19^-175
2550     -841,                                               // 19^-168
2551     -811,                                               // 19^-161
2552     -782,                                               // 19^-154
2553     -752,                                               // 19^-147
2554     -722,                                               // 19^-140
2555     -692,                                               // 19^-133
2556     -663,                                               // 19^-126
2557     -633,                                               // 19^-119
2558     -603,                                               // 19^-112
2559     -574,                                               // 19^-105
2560     -544,                                               // 19^-98
2561     -514,                                               // 19^-91
2562     -484,                                               // 19^-84
2563     -455,                                               // 19^-77
2564     -425,                                               // 19^-70
2565     -395,                                               // 19^-63
2566     -365,                                               // 19^-56
2567     -336,                                               // 19^-49
2568     -306,                                               // 19^-42
2569     -276,                                               // 19^-35
2570     -246,                                               // 19^-28
2571     -217,                                               // 19^-21
2572     -187,                                               // 19^-14
2573     -157,                                               // 19^-7
2574     -127,                                               // 19^0
2575     -98,                                                // 19^7
2576     -68,                                                // 19^14
2577     -38,                                                // 19^21
2578     -9,                                                 // 19^28
2579     21,                                                 // 19^35
2580     51,                                                 // 19^42
2581     81,                                                 // 19^49
2582     110,                                                // 19^56
2583     140,                                                // 19^63
2584     170,                                                // 19^70
2585     200,                                                // 19^77
2586     229,                                                // 19^84
2587     259,                                                // 19^91
2588     289,                                                // 19^98
2589     319,                                                // 19^105
2590     348,                                                // 19^112
2591     378,                                                // 19^119
2592     408,                                                // 19^126
2593     437,                                                // 19^133
2594     467,                                                // 19^140
2595     497,                                                // 19^147
2596     527,                                                // 19^154
2597     556,                                                // 19^161
2598     586,                                                // 19^168
2599     616,                                                // 19^175
2600     646,                                                // 19^182
2601     675,                                                // 19^189
2602     705,                                                // 19^196
2603     735,                                                // 19^203
2604     765,                                                // 19^210
2605     794,                                                // 19^217
2606     824,                                                // 19^224
2607     854,                                                // 19^231
2608     884,                                                // 19^238
2609 ];
2610 const BASE19_SMALL_INT_POWERS: [u128; 7] = [1, 19, 361, 6859, 130321, 2476099, 47045881];
2611 const BASE19_STEP: i32 = 7;
2612 const BASE19_BIAS: i32 = 273;
2613 
2614 // BASE20
2615 
2616 const BASE20_SMALL_MANTISSA: [u128; 7] = [
2617     170141183460469231731687303715884105728,            // 20^0
2618     212676479325586539664609129644855132160,            // 20^1
2619     265845599156983174580761412056068915200,            // 20^2
2620     332306998946228968225951765070086144000,            // 20^3
2621     207691874341393105141219853168803840000,            // 20^4
2622     259614842926741381426524816461004800000,            // 20^5
2623     324518553658426726783156020576256000000,            // 20^6
2624 ];
2625 const BASE20_SMALL_EXPONENT: [i32; 7] = [
2626     -127,                                               // 20^0
2627     -123,                                               // 20^1
2628     -119,                                               // 20^2
2629     -115,                                               // 20^3
2630     -110,                                               // 20^4
2631     -106,                                               // 20^5
2632     -102,                                               // 20^6
2633 ];
2634 const BASE20_LARGE_MANTISSA: [u128; 72] = [
2635     219444962751747547330237450047488370802,            // 20^-266
2636     261598781051334795153424084243164504531,            // 20^-259
2637     311850048364799970571308236412006025948,            // 20^-252
2638     185877113559722882849757812268737570016,            // 20^-245
2639     221582786512044528543660416923448526878,            // 20^-238
2640     264147265567832623176169892458258303259,            // 20^-231
2641     314888078651228693933689466069052580904,            // 20^-224
2642     187687920720117505749278942387731421532,            // 20^-217
2643     223741436863085634409521749481834675708,            // 20^-210
2644     266720577315194170963194071628850311885,            // 20^-203
2645     317955705303185189918510999237120523316,            // 20^-196
2646     189516368689051383685178160212707831452,            // 20^-189
2647     225921116696657399755928707376370229068,            // 20^-182
2648     269318958159276723570738682003462587676,            // 20^-175
2649     321053216647239593947814323906257853121,            // 20^-168
2650     191362629322552438943275406304751547051,            // 20^-161
2651     228122030881109760932058580285014566244,            // 20^-154
2652     271942652322184754529069161754863937192,            // 20^-147
2653     324180903818827574883781864350871964922,            // 20^-140
2654     193226876150862917234767594546599367214,            // 20^-133
2655     230344386280611654799899571593522271174,            // 20^-126
2656     274591906405224388599276031963255728690,            // 20^-119
2657     327339060789614187001318969682759915221,            // 20^-112
2658     195109284394749514461349826862072894109,            // 20^-105
2659     232588391774594204975783618524161450993,            // 20^-98
2660     277266969412081485957841418414308370343,            // 20^-91
2661     330527984395124299475957654016385519914,            // 20^-84
2662     197010030981972396061395200500718069025,            // 20^-77
2663     234854258277383322788948059678933702737,            // 20^-70
2664     279968092772225526319680285071055534765,            // 20^-63
2665     333747974362642200374222141588992517906,            // 20^-56
2666     198929294563914656862152899258728336040,            // 20^-49
2667     237142198758023568227473377297792835283,            // 20^-42
2668     282695530364541492733327600118866962532,            // 20^-35
2669     336999333339382997433337688587745383420,            // 20^-28
2670     200867255532373784442745261542645325315,            // 20^-21
2671     239452428260295134118491722992235809940,            // 20^-14
2672     285449538541191976211657193889899027276,            // 20^-7
2673     170141183460469231731687303715884105728,            // 20^0
2674     202824096036516704239472512860160000000,            // 20^7
2675     241785163922925834941235200000000000000,            // 20^14
2676     288230376151711744000000000000000000000,            // 20^21
2677     171798691840000000000000000000000000000,            // 20^28
2678     204800000000000000000000000000000000000,            // 20^35
2679     244140625000000000000000000000000000000,            // 20^42
2680     291038304567337036132812500000000000000,            // 20^49
2681     173472347597680709441192448139190673828,            // 20^56
2682     206795153138256918717852173017490713391,            // 20^63
2683     246519032881566189191165176650870696772,            // 20^70
2684     293873587705571876992184134305561419454,            // 20^77
2685     175162308040602133865466197911239516410,            // 20^84
2686     208809742975952784854729411496209521782,            // 20^91
2687     248920611114445668285762562151204969623,            // 20^98
2688     296736492054993710858538820923811161069,            // 20^105
2689     176868732008334225927912486150152183216,            // 20^112
2690     210843958864610464486971481025400380154,            // 20^119
2691     251345585423243599518503524095297312920,            // 20^126
2692     299627286700300692937974362486955300474,            // 20^133
2693     178591779887855465971216179422709524914,            // 20^140
2694     212897992000407535995502685812365442412,            // 20^147
2695     253794183731564922327402455583054354682,            // 20^154
2696     302546243347602990063908643225496238091,            // 20^161
2697     180331613628627651967947866455016278082,            // 20^168
2698     214972035442146840057310898846407268146,            // 20^175
2699     256266636183436918326986907537468991453,            // 20^182
2700     305493636349960468205197939321361769978,            // 20^189
2701     182088396757817547443627082897044283139,            // 20^196
2702     217066284129402097992452481862359384464,            // 20^203
2703     258763175164940474024358370140027266101,            // 20^210
2704     308469742733169167070816004443201143863,            // 20^217
2705     183862294395666818064937594201088633455,            // 20^224
2706     219180934900840303975269310714112083263,            // 20^231
2707 ];
2708 const BASE20_LARGE_EXPONENT: [i32; 72] = [
2709     -1277,                                              // 20^-266
2710     -1247,                                              // 20^-259
2711     -1217,                                              // 20^-252
2712     -1186,                                              // 20^-245
2713     -1156,                                              // 20^-238
2714     -1126,                                              // 20^-231
2715     -1096,                                              // 20^-224
2716     -1065,                                              // 20^-217
2717     -1035,                                              // 20^-210
2718     -1005,                                              // 20^-203
2719     -975,                                               // 20^-196
2720     -944,                                               // 20^-189
2721     -914,                                               // 20^-182
2722     -884,                                               // 20^-175
2723     -854,                                               // 20^-168
2724     -823,                                               // 20^-161
2725     -793,                                               // 20^-154
2726     -763,                                               // 20^-147
2727     -733,                                               // 20^-140
2728     -702,                                               // 20^-133
2729     -672,                                               // 20^-126
2730     -642,                                               // 20^-119
2731     -612,                                               // 20^-112
2732     -581,                                               // 20^-105
2733     -551,                                               // 20^-98
2734     -521,                                               // 20^-91
2735     -491,                                               // 20^-84
2736     -460,                                               // 20^-77
2737     -430,                                               // 20^-70
2738     -400,                                               // 20^-63
2739     -370,                                               // 20^-56
2740     -339,                                               // 20^-49
2741     -309,                                               // 20^-42
2742     -279,                                               // 20^-35
2743     -249,                                               // 20^-28
2744     -218,                                               // 20^-21
2745     -188,                                               // 20^-14
2746     -158,                                               // 20^-7
2747     -127,                                               // 20^0
2748     -97,                                                // 20^7
2749     -67,                                                // 20^14
2750     -37,                                                // 20^21
2751     -6,                                                 // 20^28
2752     24,                                                 // 20^35
2753     54,                                                 // 20^42
2754     84,                                                 // 20^49
2755     115,                                                // 20^56
2756     145,                                                // 20^63
2757     175,                                                // 20^70
2758     205,                                                // 20^77
2759     236,                                                // 20^84
2760     266,                                                // 20^91
2761     296,                                                // 20^98
2762     326,                                                // 20^105
2763     357,                                                // 20^112
2764     387,                                                // 20^119
2765     417,                                                // 20^126
2766     447,                                                // 20^133
2767     478,                                                // 20^140
2768     508,                                                // 20^147
2769     538,                                                // 20^154
2770     568,                                                // 20^161
2771     599,                                                // 20^168
2772     629,                                                // 20^175
2773     659,                                                // 20^182
2774     689,                                                // 20^189
2775     720,                                                // 20^196
2776     750,                                                // 20^203
2777     780,                                                // 20^210
2778     810,                                                // 20^217
2779     841,                                                // 20^224
2780     871,                                                // 20^231
2781 ];
2782 const BASE20_SMALL_INT_POWERS: [u128; 7] = [1, 20, 400, 8000, 160000, 3200000, 64000000];
2783 const BASE20_STEP: i32 = 7;
2784 const BASE20_BIAS: i32 = 266;
2785 
2786 // BASE21
2787 
2788 const BASE21_SMALL_MANTISSA: [u128; 7] = [
2789     170141183460469231731687303715884105728,            // 21^0
2790     223310303291865866647839586127097888768,            // 21^1
2791     293094773070573949975289456791815979008,            // 21^2
2792     192343444827564154671283706019629236224,            // 21^3
2793     252450771336177953006059864150763372544,            // 21^4
2794     331341637378733563320453571697876926464,            // 21^5
2795     217442949529793900929047656426731732992,            // 21^6
2796 ];
2797 const BASE21_SMALL_EXPONENT: [i32; 7] = [
2798     -127,                                               // 21^0
2799     -123,                                               // 21^1
2800     -119,                                               // 21^2
2801     -114,                                               // 21^3
2802     -110,                                               // 21^4
2803     -106,                                               // 21^5
2804     -101,                                               // 21^6
2805 ];
2806 const BASE21_LARGE_MANTISSA: [u128; 72] = [
2807     265792046637109917415346664544311644566,            // 21^-266
2808     222919047571269915259553685343512655124,            // 21^-259
2809     186961582932271121624867982904669033286,            // 21^-252
2810     313608315425491608924946770674906010971,            // 21^-245
2811     263022418727710133477288744271513099136,            // 21^-238
2812     220596168374913987040298637494305910349,            // 21^-231
2813     185013390634471631571140317809259206000,            // 21^-224
2814     310340428541697166126551714455108139315,            // 21^-217
2815     260281651120390792657949798157903984485,            // 21^-210
2816     218297494233351046265168261721480533031,            // 21^-203
2817     183085499048559996047315841365348324923,            // 21^-196
2818     307106593958686861611740529249331599561,            // 21^-189
2819     257569443082684061423017949935163592863,            // 21^-182
2820     216022772923099798407562907443165238977,            // 21^-175
2821     181177696635406520735133253192775193924,            // 21^-168
2822     303906456841905544859103298218510174905,            // 21^-161
2823     254885497015839035366704878377106222377,            // 21^-154
2824     213771754848918589809660748287013123679,            // 21^-147
2825     179289774060178761532557823153782969422,            // 21^-140
2826     300739666054273966520895709937608788747,            // 21^-133
2827     252229518422167527105381200194678741672,            // 21^-126
2828     211544193016418411141172507362190098875,            // 21^-119
2829     177421524169372127003871154186445625381,            // 21^-112
2830     297605874117660039208334869188863219128,            // 21^-105
2831     249601215872730120248972738434931034589,            // 21^-98
2832     209339843004961281067680970866486691183,            // 21^-91
2833     175572741968079828414917198043029764862,            // 21^-84
2834     294504737174751578579986057113044461622,            // 21^-77
2835     247000300975358943781849899984000214119,            // 21^-70
2836     207158462940841036386486635842909509778,            // 21^-63
2837     173743224597499683284324187350601048284,            // 21^-56
2838     291435914951326341195521446658582144907,            // 21^-49
2839     244426488343013658131803347774089798564,            // 21^-42
2840     204999813470743585875109991683322467328,            // 21^-35
2841     171932771312675304370424739613867083896,            // 21^-28
2842     288399070718915219190771894363169343679,            // 21^-21
2843     241879495562467180767563428674995339169,            // 21^-14
2844     202863657735483715761934442388454879916,            // 21^-7
2845     170141183460469231731687303715884105728,            // 21^0
2846     285393871257854494969375049060085399552,            // 21^7
2847     239359043163317715346200180609446313984,            // 21^14
2848     200749761344015565073276401119215484928,            // 21^21
2849     336736528915531181897146582027467512352,            // 21^28
2850     282419986820723101796180638245767114566,            // 21^35
2851     236864854587323684235605162154192799609,            // 21^42
2852     198657892347713919139770232958888414539,            // 21^49
2853     333227639539799771559276379603105082665,            // 21^56
2854     279477091096160878422591085338554667498,            // 21^63
2855     234396656158058199668034426556911280906,            // 21^70
2856     196587821214923499260650393397155679946,            // 21^77
2857     329755313778627116894330266634709348105,            // 21^84
2858     276564861173063847678827937275753188756,            // 21^91
2859     231954177050879743842271364358265802922,            // 21^98
2860     194539320805773455930561882331086488568,            // 21^105
2861     326319170628861950820780822968026849107,            // 21^112
2862     273682977505152590337309001442167333935,            // 21^119
2863     229537149263215762988196018745023784859,            // 21^126
2864     192512166347254302133159603748230049238,            // 21^133
2865     322918833057513041780316846850363342758,            // 21^140
2866     270831123875909826489436864951365328546,            // 21^147
2867     227145307585155914742230901032159391581,            // 21^154
2868     190506135408554552002160365053046193282,            // 21^161
2869     319553927960379009120613001977483142041,            // 21^168
2870     268008987363883357189628558586004761583,            // 21^175
2871     224778389570351742159039695242233732277,            // 21^182
2872     188521007876654358646847770858984158583,            // 21^189
2873     316224086121109227441755855330741121363,            // 21^196
2874     265216258308350559209803685525363124313,            // 21^203
2875     222436135507219581307712678266362793773,            // 21^210
2876     186556565932173473138426942632517671964,            // 21^217
2877     312928942170691327838033505846831903751,            // 21^224
2878     262452630275340665419193194878653363790,            // 21^231
2879 ];
2880 const BASE21_LARGE_EXPONENT: [i32; 72] = [
2881     -1296,                                              // 21^-266
2882     -1265,                                              // 21^-259
2883     -1234,                                              // 21^-252
2884     -1204,                                              // 21^-245
2885     -1173,                                              // 21^-238
2886     -1142,                                              // 21^-231
2887     -1111,                                              // 21^-224
2888     -1081,                                              // 21^-217
2889     -1050,                                              // 21^-210
2890     -1019,                                              // 21^-203
2891     -988,                                               // 21^-196
2892     -958,                                               // 21^-189
2893     -927,                                               // 21^-182
2894     -896,                                               // 21^-175
2895     -865,                                               // 21^-168
2896     -835,                                               // 21^-161
2897     -804,                                               // 21^-154
2898     -773,                                               // 21^-147
2899     -742,                                               // 21^-140
2900     -712,                                               // 21^-133
2901     -681,                                               // 21^-126
2902     -650,                                               // 21^-119
2903     -619,                                               // 21^-112
2904     -589,                                               // 21^-105
2905     -558,                                               // 21^-98
2906     -527,                                               // 21^-91
2907     -496,                                               // 21^-84
2908     -466,                                               // 21^-77
2909     -435,                                               // 21^-70
2910     -404,                                               // 21^-63
2911     -373,                                               // 21^-56
2912     -343,                                               // 21^-49
2913     -312,                                               // 21^-42
2914     -281,                                               // 21^-35
2915     -250,                                               // 21^-28
2916     -220,                                               // 21^-21
2917     -189,                                               // 21^-14
2918     -158,                                               // 21^-7
2919     -127,                                               // 21^0
2920     -97,                                                // 21^7
2921     -66,                                                // 21^14
2922     -35,                                                // 21^21
2923     -5,                                                 // 21^28
2924     26,                                                 // 21^35
2925     57,                                                 // 21^42
2926     88,                                                 // 21^49
2927     118,                                                // 21^56
2928     149,                                                // 21^63
2929     180,                                                // 21^70
2930     211,                                                // 21^77
2931     241,                                                // 21^84
2932     272,                                                // 21^91
2933     303,                                                // 21^98
2934     334,                                                // 21^105
2935     364,                                                // 21^112
2936     395,                                                // 21^119
2937     426,                                                // 21^126
2938     457,                                                // 21^133
2939     487,                                                // 21^140
2940     518,                                                // 21^147
2941     549,                                                // 21^154
2942     580,                                                // 21^161
2943     610,                                                // 21^168
2944     641,                                                // 21^175
2945     672,                                                // 21^182
2946     703,                                                // 21^189
2947     733,                                                // 21^196
2948     764,                                                // 21^203
2949     795,                                                // 21^210
2950     826,                                                // 21^217
2951     856,                                                // 21^224
2952     887,                                                // 21^231
2953 ];
2954 const BASE21_SMALL_INT_POWERS: [u128; 7] = [1, 21, 441, 9261, 194481, 4084101, 85766121];
2955 const BASE21_STEP: i32 = 7;
2956 const BASE21_BIAS: i32 = 266;
2957 
2958 // BASE22
2959 
2960 const BASE22_SMALL_MANTISSA: [u128; 7] = [
2961     170141183460469231731687303715884105728,            // 22^0
2962     233944127258145193631070042609340645376,            // 22^1
2963     321673174979949641242721308587843387392,            // 22^2
2964     221150307798715378354370899654142328832,            // 22^3
2965     304081673223233645237259987024445702144,            // 22^4
2966     209056150340973131100616241079306420224,            // 22^5
2967     287452206718838055263347331484046327808,            // 22^6
2968 ];
2969 const BASE22_SMALL_EXPONENT: [i32; 7] = [
2970     -127,                                               // 22^0
2971     -123,                                               // 22^1
2972     -119,                                               // 22^2
2973     -114,                                               // 22^3
2974     -110,                                               // 22^4
2975     -105,                                               // 22^5
2976     -101,                                               // 22^6
2977 ];
2978 const BASE22_LARGE_MANTISSA: [u128; 70] = [
2979     170993699408656992611557257796811971606,            // 22^-259
2980     198613611477559667549559644399735817047,            // 22^-252
2981     230694854843066209807480559654047740794,            // 22^-245
2982     267958050080955588510051414081700394572,            // 22^-238
2983     311240216657766425412953324616068813788,            // 22^-231
2984     180756787183491671385793896073455879749,            // 22^-224
2985     209953690842110549054787911387661891558,            // 22^-217
2986     243866650791248218437107825156701479612,            // 22^-210
2987     283257432291885574825362738029166670391,            // 22^-203
2988     329010845428281790557809997379933231677,            // 22^-196
2989     191077310017213090920037889613280023761,            // 22^-189
2990     221941245467987325560887198530024987097,            // 22^-182
2991     257790506028392555656294807759853932728,            // 22^-175
2992     299430350849140679073407301022315056449,            // 22^-168
2993     173898054647064197545039940705011138943,            // 22^-161
2994     201987095324676314922450395008827008097,            // 22^-154
2995     234613243722037545951821958217296505941,            // 22^-147
2996     272509360270263083361596599896866808472,            // 22^-140
2997     316526681344939644363801942778159729297,            // 22^-133
2998     183826970023851061892407973678416422311,            // 22^-126
2999     213519787744680626489456759979414929795,            // 22^-119
3000     248008764723795396613310192753363562635,            // 22^-112
3001     288068604926548520494484698905215058937,            // 22^-105
3002     334599147077506390730919115808572688418,            // 22^-98
3003     194322788582847037606425160078121997271,            // 22^-91
3004     225710952896522753756036626884027523975,            // 22^-84
3005     262169118861406100263284327408804984594,            // 22^-77
3006     304516223083230613247976703037939646270,            // 22^-70
3007     176851740822108453297561032060281913714,            // 22^-63
3008     205417878332621336576645714920472857997,            // 22^-56
3009     238598187060653380400994399373084663429,            // 22^-49
3010     277137975188549744820727493204211809261,            // 22^-42
3011     321902937477411396463387072352875080544,            // 22^-35
3012     186949300409097210175717446748311788922,            // 22^-28
3013     217146455371525722164937611369356262209,            // 22^-21
3014     252221233121680633945860233133208134270,            // 22^-14
3015     292961496095243353908740467141073506540,            // 22^-7
3016     170141183460469231731687303715884105728,            // 22^0
3017     197623392119201162993551290395281850368,            // 22^7
3018     229544689406569328704727047276706398208,            // 22^14
3019     266622103131276669014944105065242165248,            // 22^21
3020     309688479667831891620434363534947647488,            // 22^28
3021     179855595827611186243917689814617910464,            // 22^35
3022     208906933736774069538597567757512183241,            // 22^42
3023     242650815297018604365857953016443636978,            // 22^49
3024     281845207868958552685905724295461354592,            // 22^56
3025     327370510177191550022527822209865447333,            // 22^63
3026     190124664073591590972067520727552350138,            // 22^70
3027     220834722526051754798575401303998056567,            // 22^77
3028     256505250966711193359488809204377717494,            // 22^84
3029     297937493800295372760917121026044042670,            // 22^91
3030     173031058579617612943075122066206208260,            // 22^98
3031     200980056932689281584830175015332323410,            // 22^105
3032     233443542542281837469979323535186565406,            // 22^112
3033     271150722048713022289973166238934106646,            // 22^119
3034     314948587854906379895896832699151980516,            // 22^126
3035     182910471789153927982518189465009158829,            // 22^133
3036     212455251303071888680280266327561854998,            // 22^140
3037     246772278069909496307705991140052073087,            // 22^147
3038     286632393646709698979385809127728921005,            // 22^154
3039     332930950470730393610585733499849696474,            // 22^161
3040     193353961796034982060992467369794830962,            // 22^168
3041     224585635486054469192295827945894724481,            // 22^175
3042     260862033537650797156363766298784568546,            // 22^182
3043     302998009619470597652934458975103615488,            // 22^189
3044     175970018688269509849993361647138860754,            // 22^196
3045     204393735233038880379975139336743154541,            // 22^203
3046     237408618319925875163860351801153447367,            // 22^210
3047     275756260280259146490263920764281465178,            // 22^217
3048     320298039817924375055421761218548035863,            // 22^224
3049 ];
3050 const BASE22_LARGE_EXPONENT: [i32; 70] = [
3051     -1282,                                              // 22^-259
3052     -1251,                                              // 22^-252
3053     -1220,                                              // 22^-245
3054     -1189,                                              // 22^-238
3055     -1158,                                              // 22^-231
3056     -1126,                                              // 22^-224
3057     -1095,                                              // 22^-217
3058     -1064,                                              // 22^-210
3059     -1033,                                              // 22^-203
3060     -1002,                                              // 22^-196
3061     -970,                                               // 22^-189
3062     -939,                                               // 22^-182
3063     -908,                                               // 22^-175
3064     -877,                                               // 22^-168
3065     -845,                                               // 22^-161
3066     -814,                                               // 22^-154
3067     -783,                                               // 22^-147
3068     -752,                                               // 22^-140
3069     -721,                                               // 22^-133
3070     -689,                                               // 22^-126
3071     -658,                                               // 22^-119
3072     -627,                                               // 22^-112
3073     -596,                                               // 22^-105
3074     -565,                                               // 22^-98
3075     -533,                                               // 22^-91
3076     -502,                                               // 22^-84
3077     -471,                                               // 22^-77
3078     -440,                                               // 22^-70
3079     -408,                                               // 22^-63
3080     -377,                                               // 22^-56
3081     -346,                                               // 22^-49
3082     -315,                                               // 22^-42
3083     -284,                                               // 22^-35
3084     -252,                                               // 22^-28
3085     -221,                                               // 22^-21
3086     -190,                                               // 22^-14
3087     -159,                                               // 22^-7
3088     -127,                                               // 22^0
3089     -96,                                                // 22^7
3090     -65,                                                // 22^14
3091     -34,                                                // 22^21
3092     -3,                                                 // 22^28
3093     29,                                                 // 22^35
3094     60,                                                 // 22^42
3095     91,                                                 // 22^49
3096     122,                                                // 22^56
3097     153,                                                // 22^63
3098     185,                                                // 22^70
3099     216,                                                // 22^77
3100     247,                                                // 22^84
3101     278,                                                // 22^91
3102     310,                                                // 22^98
3103     341,                                                // 22^105
3104     372,                                                // 22^112
3105     403,                                                // 22^119
3106     434,                                                // 22^126
3107     466,                                                // 22^133
3108     497,                                                // 22^140
3109     528,                                                // 22^147
3110     559,                                                // 22^154
3111     590,                                                // 22^161
3112     622,                                                // 22^168
3113     653,                                                // 22^175
3114     684,                                                // 22^182
3115     715,                                                // 22^189
3116     747,                                                // 22^196
3117     778,                                                // 22^203
3118     809,                                                // 22^210
3119     840,                                                // 22^217
3120     871,                                                // 22^224
3121 ];
3122 const BASE22_SMALL_INT_POWERS: [u128; 7] = [1, 22, 484, 10648, 234256, 5153632, 113379904];
3123 const BASE22_STEP: i32 = 7;
3124 const BASE22_BIAS: i32 = 259;
3125 
3126 // BASE23
3127 
3128 const BASE23_SMALL_MANTISSA: [u128; 7] = [
3129     170141183460469231731687303715884105728,            // 23^0
3130     244577951224424520614300499091583401984,            // 23^1
3131     175790402442555124191528483722075570176,            // 23^2
3132     252698703511172991025322195350483632128,            // 23^3
3133     181627193148655587299450327908160110592,            // 23^4
3134     261089090151192406742959846367980158976,            // 23^5
3135     187657783546169542346502389576985739264,            // 23^6
3136 ];
3137 const BASE23_SMALL_EXPONENT: [i32; 7] = [
3138     -127,                                               // 23^0
3139     -123,                                               // 23^1
3140     -118,                                               // 23^2
3141     -114,                                               // 23^3
3142     -109,                                               // 23^4
3143     -105,                                               // 23^5
3144     -100,                                               // 23^6
3145 ];
3146 const BASE23_LARGE_MANTISSA: [u128; 69] = [
3147     177660070384959299518117426820409879479,            // 23^-252
3148     281679224484842507661590842703493245235,            // 23^-245
3149     223300557447880794264720046366338636067,            // 23^-238
3150     177021003404592607294928857171705382014,            // 23^-231
3151     280665986726726659567026238400885338462,            // 23^-224
3152     222497315545222527698408099502330410230,            // 23^-217
3153     176384235233432227183413281705333529169,            // 23^-210
3154     279656393720034524921314175179274359595,            // 23^-203
3155     221696963010873772243653930801015609536,            // 23^-196
3156     175749757602354687973874432000535316950,            // 23^-189
3157     278650432354108872233513992865613552171,            // 23^-182
3158     220899489451391157505367921930602163472,            // 23^-175
3159     175117562271981659025201047697761937562,            // 23^-168
3160     277648089565453253577594524944387660343,            // 23^-161
3161     220104884510717915806439152820624263438,            // 23^-154
3162     174487641032572953025011241897191693675,            // 23^-147
3163     276649352337562360960754521131809259049,            // 23^-140
3164     219313137870049397588841701361789229875,            // 23^-133
3165     173859985703919913633146478806481352851,            // 23^-126
3166     275654207700752992922523689325318624601,            // 23^-119
3167     218524239247699070573788964393354746146,            // 23^-112
3168     173234588135239186624038395745277208596,            // 23^-105
3169     274662642731995629169562809047557585825,            // 23^-98
3170     217738178398965000940790150805824878955,            // 23^-91
3171     172611440205066873148451849294509762826,            // 23^-84
3172     273674644554746611058977369746265857416,            // 23^-77
3173     216954945115996814791722634413562231827,            // 23^-70
3174     171990533821153063740069798803230423676,            // 23^-63
3175     272690200338780925750826785583705218666,            // 23^-56
3176     216174529227663138172270874689475697712,            // 23^-49
3177     171371860920356751697330024074687407971,            // 23^-42
3178     271709297300025591858350535820526217684,            // 23^-35
3179     215396920599419513929297198496715326537,            // 23^-28
3180     170755413468541124475850272054650469150,            // 23^-21
3181     270731922700393644432243678371210997948,            // 23^-14
3182     214622109133176793688901966303396671549,            // 23^-7
3183     170141183460469231731687303715884105728,            // 23^0
3184     269758063847618717123097185016917000192,            // 23^7
3185     213850084767170003246100602438595641344,            // 23^14
3186     339058325839400057321133061640411938816,            // 23^21
3187     268787708095090219373873551177395072962,            // 23^28
3188     213080837475827679663192730864754774513,            // 23^35
3189     337838687796969586566185112723027994705,            // 23^42
3190     267820842841689106502015241773782572538,            // 23^49
3191     212314357269641678380024305538561269739,            // 23^56
3192     336623436955327832661614051077606366471,            // 23^63
3193     266857455531624240538482847903341038248,            // 23^70
3194     211550634195037448645447237257455979321,            // 23^77
3195     335412557533128124785597638278283462337,            // 23^84
3196     265897533654269339698691446779528819034,            // 23^91
3197     210789658334244775585362676204225495858,            // 23^98
3198     334206033805791401974785682123232789907,            // 23^105
3199     264941064744000514367957679290425962065,            // 23^112
3200     210031419805168987228793890184514974036,            // 23^119
3201     333003850105302012456495057986285588216,            // 23^126
3202     263988036380034387491686584861354377998,            // 23^133
3203     209275908761262624819472661494385533289,            // 23^140
3204     331805990820004247517955628678622148639,            // 23^147
3205     263038436186266797268116360982380732098,            // 23^154
3206     208523115391397574746439388866966551936,            // 23^161
3207     330612440394399607270379273154482344971,            // 23^168
3208     262092251831112080049001043331284413642,            // 23^175
3209     207773029919737660433151703156509162570,            // 23^182
3210     329423183328944795675128680336602321085,            // 23^189
3211     261149471027342931361145730086041639640,            // 23^196
3212     207025642605611692530569464171386341133,            // 23^203
3213     328238204179850442208732821518504518810,            // 23^210
3214     260210081531930842969216498623209392426,            // 23^217
3215     206280943743386975765635578931435897048,            // 23^224
3216 ];
3217 const BASE23_LARGE_EXPONENT: [i32; 69] = [
3218     -1267,                                              // 23^-252
3219     -1236,                                              // 23^-245
3220     -1204,                                              // 23^-238
3221     -1172,                                              // 23^-231
3222     -1141,                                              // 23^-224
3223     -1109,                                              // 23^-217
3224     -1077,                                              // 23^-210
3225     -1046,                                              // 23^-203
3226     -1014,                                              // 23^-196
3227     -982,                                               // 23^-189
3228     -951,                                               // 23^-182
3229     -919,                                               // 23^-175
3230     -887,                                               // 23^-168
3231     -856,                                               // 23^-161
3232     -824,                                               // 23^-154
3233     -792,                                               // 23^-147
3234     -761,                                               // 23^-140
3235     -729,                                               // 23^-133
3236     -697,                                               // 23^-126
3237     -666,                                               // 23^-119
3238     -634,                                               // 23^-112
3239     -602,                                               // 23^-105
3240     -571,                                               // 23^-98
3241     -539,                                               // 23^-91
3242     -507,                                               // 23^-84
3243     -476,                                               // 23^-77
3244     -444,                                               // 23^-70
3245     -412,                                               // 23^-63
3246     -381,                                               // 23^-56
3247     -349,                                               // 23^-49
3248     -317,                                               // 23^-42
3249     -286,                                               // 23^-35
3250     -254,                                               // 23^-28
3251     -222,                                               // 23^-21
3252     -191,                                               // 23^-14
3253     -159,                                               // 23^-7
3254     -127,                                               // 23^0
3255     -96,                                                // 23^7
3256     -64,                                                // 23^14
3257     -33,                                                // 23^21
3258     -1,                                                 // 23^28
3259     31,                                                 // 23^35
3260     62,                                                 // 23^42
3261     94,                                                 // 23^49
3262     126,                                                // 23^56
3263     157,                                                // 23^63
3264     189,                                                // 23^70
3265     221,                                                // 23^77
3266     252,                                                // 23^84
3267     284,                                                // 23^91
3268     316,                                                // 23^98
3269     347,                                                // 23^105
3270     379,                                                // 23^112
3271     411,                                                // 23^119
3272     442,                                                // 23^126
3273     474,                                                // 23^133
3274     506,                                                // 23^140
3275     537,                                                // 23^147
3276     569,                                                // 23^154
3277     601,                                                // 23^161
3278     632,                                                // 23^168
3279     664,                                                // 23^175
3280     696,                                                // 23^182
3281     727,                                                // 23^189
3282     759,                                                // 23^196
3283     791,                                                // 23^203
3284     822,                                                // 23^210
3285     854,                                                // 23^217
3286     886,                                                // 23^224
3287 ];
3288 const BASE23_SMALL_INT_POWERS: [u128; 7] = [1, 23, 529, 12167, 279841, 6436343, 148035889];
3289 const BASE23_STEP: i32 = 7;
3290 const BASE23_BIAS: i32 = 252;
3291 
3292 // BASE24
3293 
3294 const BASE24_SMALL_MANTISSA: [u128; 7] = [
3295     170141183460469231731687303715884105728,            // 24^0
3296     255211775190703847597530955573826158592,            // 24^1
3297     191408831393027885698148216680369618944,            // 24^2
3298     287113247089541828547222325020554428416,            // 24^3
3299     215334935317156371410416743765415821312,            // 24^4
3300     323002402975734557115625115648123731968,            // 24^5
3301     242251802231800917836718836736092798976,            // 24^6
3302 ];
3303 const BASE24_SMALL_EXPONENT: [i32; 7] = [
3304     -127,                                               // 24^0
3305     -123,                                               // 24^1
3306     -118,                                               // 24^2
3307     -114,                                               // 24^3
3308     -109,                                               // 24^4
3309     -105,                                               // 24^5
3310     -100,                                               // 24^6
3311 ];
3312 const BASE24_LARGE_MANTISSA: [u128; 68] = [
3313     256006814417050404626793229969178591795,            // 24^-252
3314     273382276918988884237693747042282021609,            // 24^-245
3315     291937031065346039954998156631577529912,            // 24^-238
3316     311751116669878803408975082301396512655,            // 24^-231
3317     332910005936047335476283449703688561122,            // 24^-224
3318     177752486079622930343415992310050508587,            // 24^-217
3319     189816741726628588213403698819375225722,            // 24^-210
3320     202699811599676133995465766268541805984,            // 24^-203
3321     216457269515865090355509585365869594574,            // 24^-196
3322     231148461148045387015380597263260157877,            // 24^-189
3323     246836760024792608106756526472045881483,            // 24^-182
3324     263589840905381559535877208688654464260,            // 24^-175
3325     281479971709018296242657937208050445965,            // 24^-168
3326     300584325257628424747408646813479651038,            // 24^-161
3327     320985312176969416466104839150917967197,            // 24^-154
3328     171385468196052762160979317193129295473,            // 24^-147
3329     183017587375374702561553597022155160742,            // 24^-140
3330     195439191206027575440487166351295574484,            // 24^-133
3331     208703862874796048578293668364396201854,            // 24^-126
3332     222868822317958475703480592144987545632,            // 24^-119
3333     237995173051452727716558620615765508935,            // 24^-112
3334     254148165753675349373102394182948812519,            // 24^-105
3335     271397479737933588417468230506889186025,            // 24^-98
3336     289817523528740604428224130917268871991,            // 24^-91
3337     309487755838552588810803796052767101096,            // 24^-84
3338     330493028329548101430287061507520336961,            // 24^-77
3339     176461975819512133258798291874254633040,            // 24^-70
3340     188438643123668474334468683754392032451,            // 24^-63
3341     201228179937237770199942876645925476060,            // 24^-56
3342     214885756602899904017224155871405769601,            // 24^-49
3343     229470287934835004924643178169318563534,            // 24^-42
3344     245044687360099685434665347000146337133,            // 24^-35
3345     261676138308856451194147028266269550444,            // 24^-28
3346     279436384024154813848437280673013431065,            // 24^-21
3347     298402037041419227483658365640566588740,            // 24^-14
3348     318654909672648364505254319167929262488,            // 24^-7
3349     170141183460469231731687303715884105728,            // 24^0
3350     181688851673850688377539127552069599232,            // 24^7
3351     194020272759136452871913121072449323008,            // 24^14
3352     207188640880972374233825193254612631552,            // 24^21
3353     221250760550139932836609227367108313088,            // 24^28
3354     236267291661697281793781435669856387072,            // 24^35
3355     252303011164126931290527343657214803968,            // 24^42
3356     269427092488254686881046533485512097792,            // 24^49
3357     287713403941314941508226937857819803648,            // 24^56
3358     307240827353347547401607574753443315712,            // 24^63
3359     328093598350474163167634651360244400128,            // 24^70
3360     175180834861447020226468989874232056416,            // 24^77
3361     187070549727531559196917812917453861026,            // 24^84
3362     199767232545952890607255496509019333039,            // 24^91
3363     213325653114257310428744028742785781912,            // 24^98
3364     227804298516055047806476167412340090352,            // 24^105
3365     243265625417291205836310243227923719532,            // 24^112
3366     259776329486140560138677002900131432918,            // 24^119
3367     277407633098725295421526662764935275289,            // 24^126
3368     296235592571734482952577544661578831571,            // 24^133
3369     316341426247257477645159711999449660471,            // 24^140
3370     337811864845093800590802876046287308325,            // 24^147
3371     180369762796928745579122531717097251784,            // 24^154
3372     192611655877384358682393055110005707838,            // 24^161
3373     205684419630781050995309380627725821797,            // 24^168
3374     219644446158456132093135554410564634898,            // 24^175
3375     234551954955343535589691141355422293223,            // 24^182
3376     250471252679363433757155530343900661758,            // 24^189
3377     267471010551644448060009348077202513313,            // 24^196
3378     285624560584202347610957248166426707331,            // 24^203
3379     305010211912915299914630616083972269987,            // 24^210
3380     325711588600364141070945877624827809796,            // 24^217
3381 ];
3382 const BASE24_LARGE_EXPONENT: [i32; 68] = [
3383     -1283,                                              // 24^-252
3384     -1251,                                              // 24^-245
3385     -1219,                                              // 24^-238
3386     -1187,                                              // 24^-231
3387     -1155,                                              // 24^-224
3388     -1122,                                              // 24^-217
3389     -1090,                                              // 24^-210
3390     -1058,                                              // 24^-203
3391     -1026,                                              // 24^-196
3392     -994,                                               // 24^-189
3393     -962,                                               // 24^-182
3394     -930,                                               // 24^-175
3395     -898,                                               // 24^-168
3396     -866,                                               // 24^-161
3397     -834,                                               // 24^-154
3398     -801,                                               // 24^-147
3399     -769,                                               // 24^-140
3400     -737,                                               // 24^-133
3401     -705,                                               // 24^-126
3402     -673,                                               // 24^-119
3403     -641,                                               // 24^-112
3404     -609,                                               // 24^-105
3405     -577,                                               // 24^-98
3406     -545,                                               // 24^-91
3407     -513,                                               // 24^-84
3408     -481,                                               // 24^-77
3409     -448,                                               // 24^-70
3410     -416,                                               // 24^-63
3411     -384,                                               // 24^-56
3412     -352,                                               // 24^-49
3413     -320,                                               // 24^-42
3414     -288,                                               // 24^-35
3415     -256,                                               // 24^-28
3416     -224,                                               // 24^-21
3417     -192,                                               // 24^-14
3418     -160,                                               // 24^-7
3419     -127,                                               // 24^0
3420     -95,                                                // 24^7
3421     -63,                                                // 24^14
3422     -31,                                                // 24^21
3423     1,                                                  // 24^28
3424     33,                                                 // 24^35
3425     65,                                                 // 24^42
3426     97,                                                 // 24^49
3427     129,                                                // 24^56
3428     161,                                                // 24^63
3429     193,                                                // 24^70
3430     226,                                                // 24^77
3431     258,                                                // 24^84
3432     290,                                                // 24^91
3433     322,                                                // 24^98
3434     354,                                                // 24^105
3435     386,                                                // 24^112
3436     418,                                                // 24^119
3437     450,                                                // 24^126
3438     482,                                                // 24^133
3439     514,                                                // 24^140
3440     546,                                                // 24^147
3441     579,                                                // 24^154
3442     611,                                                // 24^161
3443     643,                                                // 24^168
3444     675,                                                // 24^175
3445     707,                                                // 24^182
3446     739,                                                // 24^189
3447     771,                                                // 24^196
3448     803,                                                // 24^203
3449     835,                                                // 24^210
3450     867,                                                // 24^217
3451 ];
3452 const BASE24_SMALL_INT_POWERS: [u128; 7] = [1, 24, 576, 13824, 331776, 7962624, 191102976];
3453 const BASE24_STEP: i32 = 7;
3454 const BASE24_BIAS: i32 = 252;
3455 
3456 // BASE25
3457 
3458 const BASE25_SMALL_MANTISSA: [u128; 7] = [
3459     170141183460469231731687303715884105728,            // 25^0
3460     265845599156983174580761412056068915200,            // 25^1
3461     207691874341393105141219853168803840000,            // 25^2
3462     324518553658426726783156020576256000000,            // 25^3
3463     253530120045645880299340641075200000000,            // 25^4
3464     198070406285660843983859875840000000000,            // 25^5
3465     309485009821345068724781056000000000000,            // 25^6
3466 ];
3467 const BASE25_SMALL_EXPONENT: [i32; 7] = [
3468     -127,                                               // 25^0
3469     -123,                                               // 25^1
3470     -118,                                               // 25^2
3471     -114,                                               // 25^3
3472     -109,                                               // 25^4
3473     -104,                                               // 25^5
3474     -100,                                               // 25^6
3475 ];
3476 const BASE25_LARGE_MANTISSA: [u128; 68] = [
3477     285793394306920833441610418092098634655,            // 25^-252
3478     203068420253004570555511362849258201390,            // 25^-245
3479     288577581746103207017755725657449092679,            // 25^-238
3480     205046704412910121830119952091883627559,            // 25^-231
3481     291388892624283530821742192659774598780,            // 25^-224
3482     207044260935364498850036477975162511299,            // 25^-217
3483     294227591176883860910658765384315687611,            // 25^-210
3484     209061277570927374050781655074839937648,            // 25^-203
3485     297093944213496817569054052050375869453,            // 25^-196
3486     211097943899216614887176072592734406508,            // 25^-189
3487     299988221142963048588365030287739055137,            // 25^-182
3488     213154451346726893197828921904416471830,            // 25^-175
3489     302910693998692996157485768413290076965,            // 25^-168
3490     215230993204821882725842221200657943544,            // 25^-161
3491     305861637464235347360161968596028634045,            // 25^-154
3492     217327764647901735884376228537482684576,            // 25^-147
3493     308841328899094571460716776609676066664,            // 25^-140
3494     219444962751747547330237450047488370802,            // 25^-133
3495     311850048364799970571308236412006025948,            // 25^-126
3496     221582786512044528543660416923448526878,            // 25^-119
3497     314888078651228693933689466069052580904,            // 25^-112
3498     223741436863085634409521749481834675708,            // 25^-105
3499     317955705303185189918510999237120523316,            // 25^-98
3500     225921116696657399755928707376370229068,            // 25^-91
3501     321053216647239593947814323906257853121,            // 25^-84
3502     228122030881109760932058580285014566244,            // 25^-77
3503     324180903818827574883781864350871964922,            // 25^-70
3504     230344386280611654799899571593522271174,            // 25^-63
3505     327339060789614187001318969682759915221,            // 25^-56
3506     232588391774594204975783618524161450993,            // 25^-49
3507     330527984395124299475957654016385519914,            // 25^-42
3508     234854258277383322788948059678933702737,            // 25^-35
3509     333747974362642200374222141588992517906,            // 25^-28
3510     237142198758023568227473377297792835283,            // 25^-21
3511     336999333339382997433337688587745383420,            // 25^-14
3512     239452428260295134118491722992235809940,            // 25^-7
3513     170141183460469231731687303715884105728,            // 25^0
3514     241785163922925834941235200000000000000,            // 25^7
3515     171798691840000000000000000000000000000,            // 25^14
3516     244140625000000000000000000000000000000,            // 25^21
3517     173472347597680709441192448139190673828,            // 25^28
3518     246519032881566189191165176650870696772,            // 25^35
3519     175162308040602133865466197911239516410,            // 25^42
3520     248920611114445668285762562151204969623,            // 25^49
3521     176868732008334225927912486150152183216,            // 25^56
3522     251345585423243599518503524095297312920,            // 25^63
3523     178591779887855465971216179422709524914,            // 25^70
3524     253794183731564922327402455583054354682,            // 25^77
3525     180331613628627651967947866455016278082,            // 25^84
3526     256266636183436918326986907537468991453,            // 25^91
3527     182088396757817547443627082897044283139,            // 25^98
3528     258763175164940474024358370140027266101,            // 25^105
3529     183862294395666818064937594201088633455,            // 25^112
3530     261284035326052074402891767876281837538,            // 25^119
3531     185653473271011701515143789632334288014,            // 25^126
3532     263829453602698580304979415177988198613,            // 25^133
3533     187462101736953869352205554703508169192,            // 25^140
3534     266399669239026862544798113253119949479,            // 25^147
3535     189288349786683953755640255602884245064,            // 25^154
3536     268994923809890385876486015494726082500,            // 25^161
3537     191132389069459226417170338759437756337,            // 25^168
3538     271615461243554856334256923502490730495,            // 25^175
3539     192994392906736931318972184714148973580,            // 25^182
3540     274261527844625066050770363850331497104,            // 25^189
3541     194874536308464787773268059716493991903,            // 25^196
3542     276933372317195090450451374005771742621,            // 25^203
3543     196772995989530194869453349330805553038,            // 25^210
3544     279631245788224013707368483964622716141,            // 25^217
3545 ];
3546 const BASE25_LARGE_EXPONENT: [i32; 68] = [
3547     -1298,                                              // 25^-252
3548     -1265,                                              // 25^-245
3549     -1233,                                              // 25^-238
3550     -1200,                                              // 25^-231
3551     -1168,                                              // 25^-224
3552     -1135,                                              // 25^-217
3553     -1103,                                              // 25^-210
3554     -1070,                                              // 25^-203
3555     -1038,                                              // 25^-196
3556     -1005,                                              // 25^-189
3557     -973,                                               // 25^-182
3558     -940,                                               // 25^-175
3559     -908,                                               // 25^-168
3560     -875,                                               // 25^-161
3561     -843,                                               // 25^-154
3562     -810,                                               // 25^-147
3563     -778,                                               // 25^-140
3564     -745,                                               // 25^-133
3565     -713,                                               // 25^-126
3566     -680,                                               // 25^-119
3567     -648,                                               // 25^-112
3568     -615,                                               // 25^-105
3569     -583,                                               // 25^-98
3570     -550,                                               // 25^-91
3571     -518,                                               // 25^-84
3572     -485,                                               // 25^-77
3573     -453,                                               // 25^-70
3574     -420,                                               // 25^-63
3575     -388,                                               // 25^-56
3576     -355,                                               // 25^-49
3577     -323,                                               // 25^-42
3578     -290,                                               // 25^-35
3579     -258,                                               // 25^-28
3580     -225,                                               // 25^-21
3581     -193,                                               // 25^-14
3582     -160,                                               // 25^-7
3583     -127,                                               // 25^0
3584     -95,                                                // 25^7
3585     -62,                                                // 25^14
3586     -30,                                                // 25^21
3587     3,                                                  // 25^28
3588     35,                                                 // 25^35
3589     68,                                                 // 25^42
3590     100,                                                // 25^49
3591     133,                                                // 25^56
3592     165,                                                // 25^63
3593     198,                                                // 25^70
3594     230,                                                // 25^77
3595     263,                                                // 25^84
3596     295,                                                // 25^91
3597     328,                                                // 25^98
3598     360,                                                // 25^105
3599     393,                                                // 25^112
3600     425,                                                // 25^119
3601     458,                                                // 25^126
3602     490,                                                // 25^133
3603     523,                                                // 25^140
3604     555,                                                // 25^147
3605     588,                                                // 25^154
3606     620,                                                // 25^161
3607     653,                                                // 25^168
3608     685,                                                // 25^175
3609     718,                                                // 25^182
3610     750,                                                // 25^189
3611     783,                                                // 25^196
3612     815,                                                // 25^203
3613     848,                                                // 25^210
3614     880,                                                // 25^217
3615 ];
3616 const BASE25_SMALL_INT_POWERS: [u128; 7] = [1, 25, 625, 15625, 390625, 9765625, 244140625];
3617 const BASE25_STEP: i32 = 7;
3618 const BASE25_BIAS: i32 = 252;
3619 
3620 // BASE26
3621 
3622 const BASE26_SMALL_MANTISSA: [u128; 7] = [
3623     170141183460469231731687303715884105728,            // 26^0
3624     276479423123262501563991868538311671808,            // 26^1
3625     224639531287650782520743393187378233344,            // 26^2
3626     182519619171216260798104006964744814592,            // 26^3
3627     296594381153226423796919011317710323712,            // 26^4
3628     240982934686996469334996696695639638016,            // 26^5
3629     195798634433184631334684816065207205888,            // 26^6
3630 ];
3631 const BASE26_SMALL_EXPONENT: [i32; 7] = [
3632     -127,                                               // 26^0
3633     -123,                                               // 26^1
3634     -118,                                               // 26^2
3635     -113,                                               // 26^3
3636     -109,                                               // 26^4
3637     -104,                                               // 26^5
3638     -99,                                                // 26^6
3639 ];
3640 const BASE26_LARGE_MANTISSA: [u128; 67] = [
3641     223302816785416365261501121183664506010,            // 26^-245
3642     208793887424582006747864373745206480886,            // 26^-238
3643     195227664627991173689253365541181602096,            // 26^-231
3644     182542896759209079117924981191278218615,            // 26^-224
3645     170682311959929403775713752016508602388,            // 26^-217
3646     319184719133881733167774634228398630548,            // 26^-210
3647     298445936660656380797439373851559361096,            // 26^-203
3648     279054640682520272457995982566385389064,            // 26^-196
3649     260923279297292454826462160021044868443,            // 26^-189
3650     243969989220528359050303591757077787596,            // 26^-182
3651     228118226171942658526451569535286060353,            // 26^-175
3652     213296419277190995686832685182416132955,            // 26^-168
3653     199437647924631042854519895051784617004,            // 26^-161
3654     186479339618067826498814972661362929947,            // 26^-154
3655     174362987461285330626576271532417342855,            // 26^-147
3656     326067771997608226855765039505019953527,            // 26^-140
3657     304881768440366443726402955195105316329,            // 26^-133
3658     285072309225356538301642822964643005408,            // 26^-126
3659     266549954439052068809893515776468694564,            // 26^-119
3660     249231075457753005677502945704601914895,            // 26^-112
3661     233037477363483566918311865718592557833,            // 26^-105
3662     217896045893127676516686822732460831572,            // 26^-98
3663     203738417326773735777703283427712394918,            // 26^-91
3664     190500669824811165252338688092226229364,            // 26^-84
3665     178123034820162511238845936350714491622,            // 26^-77
3666     333099254325168111301464298292509503356,            // 26^-70
3667     311456385593267303107050428484389238716,            // 26^-63
3668     291219745668138391592456499213129019442,            // 26^-56
3669     272297965910924348580716754684381379181,            // 26^-49
3670     254605614290044560620651113294031241626,            // 26^-42
3671     238062809654687405271268739306918462570,            // 26^-35
3672     222594861070586991002412082254420837256,            // 26^-28
3673     208131930589681357218231284385128680344,            // 26^-21
3674     194608717931053648412097371491373800423,            // 26^-14
3675     181964165649487446029462142596867446143,            // 26^-7
3676     170141183460469231731687303715884105728,            // 26^0
3677     318172780953925025918862826105961709568,            // 26^7
3678     297499748388299952530789444812804194304,            // 26^14
3679     278169930267914565987548746187341299712,            // 26^21
3680     260096052263752396381159488684908609536,            // 26^28
3681     243196510629429753543644020787720315589,            // 26^35
3682     227395003759435617782759026890197718352,            // 26^42
3683     212620187686592486096128182198450396409,            // 26^49
3684     198805353963305641500281734389939339052,            // 26^56
3685     185888128472231349675004689621278542958,            // 26^63
3686     173810189806491030350550655153103473999,            // 26^70
3687     325034011895830307254166714675296871096,            // 26^77
3688     303915176108832810280521264920190203131,            // 26^84
3689     284168520489679119677023043643028417295,            // 26^91
3690     265704888683728554332237168601547339173,            // 26^98
3691     248440917202145588620033973783642939305,            // 26^105
3692     232298659034884347081172590621418853088,            // 26^112
3693     217205231719130933968079964556427917884,            // 26^119
3694     203092488274228969742684708734280089507,            // 26^126
3695     189896709517356115129460946793154219973,            // 26^133
3696     177558316370753675479515454481338457101,            // 26^140
3697     332043201723146894831623394706398020929,            // 26^147
3698     310468949199606660363664220576467010752,            // 26^154
3699     290296467197293861525395669447395056845,            // 26^161
3700     271434676751037481783657313824389119896,            // 26^168
3701     253798416681617203255579043607175584203,            // 26^175
3702     237308059092157195001470401326248026898,            // 26^182
3703     221889149847346996027560241559399617642,            // 26^189
3704     207472072412249451654170398205728730819,            // 26^196
3705     193991733532924439390933354984357040572,            // 26^203
3706     181387269339713144970498252974494732833,            // 26^210
3707     339203541092472346195720855153810480522,            // 26^217
3708 ];
3709 const BASE26_LARGE_EXPONENT: [i32; 67] = [
3710     -1279,                                              // 26^-245
3711     -1246,                                              // 26^-238
3712     -1213,                                              // 26^-231
3713     -1180,                                              // 26^-224
3714     -1147,                                              // 26^-217
3715     -1115,                                              // 26^-210
3716     -1082,                                              // 26^-203
3717     -1049,                                              // 26^-196
3718     -1016,                                              // 26^-189
3719     -983,                                               // 26^-182
3720     -950,                                               // 26^-175
3721     -917,                                               // 26^-168
3722     -884,                                               // 26^-161
3723     -851,                                               // 26^-154
3724     -818,                                               // 26^-147
3725     -786,                                               // 26^-140
3726     -753,                                               // 26^-133
3727     -720,                                               // 26^-126
3728     -687,                                               // 26^-119
3729     -654,                                               // 26^-112
3730     -621,                                               // 26^-105
3731     -588,                                               // 26^-98
3732     -555,                                               // 26^-91
3733     -522,                                               // 26^-84
3734     -489,                                               // 26^-77
3735     -457,                                               // 26^-70
3736     -424,                                               // 26^-63
3737     -391,                                               // 26^-56
3738     -358,                                               // 26^-49
3739     -325,                                               // 26^-42
3740     -292,                                               // 26^-35
3741     -259,                                               // 26^-28
3742     -226,                                               // 26^-21
3743     -193,                                               // 26^-14
3744     -160,                                               // 26^-7
3745     -127,                                               // 26^0
3746     -95,                                                // 26^7
3747     -62,                                                // 26^14
3748     -29,                                                // 26^21
3749     4,                                                  // 26^28
3750     37,                                                 // 26^35
3751     70,                                                 // 26^42
3752     103,                                                // 26^49
3753     136,                                                // 26^56
3754     169,                                                // 26^63
3755     202,                                                // 26^70
3756     234,                                                // 26^77
3757     267,                                                // 26^84
3758     300,                                                // 26^91
3759     333,                                                // 26^98
3760     366,                                                // 26^105
3761     399,                                                // 26^112
3762     432,                                                // 26^119
3763     465,                                                // 26^126
3764     498,                                                // 26^133
3765     531,                                                // 26^140
3766     563,                                                // 26^147
3767     596,                                                // 26^154
3768     629,                                                // 26^161
3769     662,                                                // 26^168
3770     695,                                                // 26^175
3771     728,                                                // 26^182
3772     761,                                                // 26^189
3773     794,                                                // 26^196
3774     827,                                                // 26^203
3775     860,                                                // 26^210
3776     892,                                                // 26^217
3777 ];
3778 const BASE26_SMALL_INT_POWERS: [u128; 7] = [1, 26, 676, 17576, 456976, 11881376, 308915776];
3779 const BASE26_STEP: i32 = 7;
3780 const BASE26_BIAS: i32 = 245;
3781 
3782 // BASE27
3783 
3784 const BASE27_SMALL_MANTISSA: [u128; 6] = [
3785     170141183460469231731687303715884105728,            // 27^0
3786     287113247089541828547222325020554428416,            // 27^1
3787     242251802231800917836718836736092798976,            // 27^2
3788     204399958133082024424731518496078299136,            // 27^3
3789     172462464674787958108367218731066064896,            // 27^4
3790     291030409138704679307869681608673984512,            // 27^5
3791 ];
3792 const BASE27_SMALL_EXPONENT: [i32; 6] = [
3793     -127,                                               // 27^0
3794     -123,                                               // 27^1
3795     -118,                                               // 27^2
3796     -113,                                               // 27^3
3797     -108,                                               // 27^4
3798     -104,                                               // 27^5
3799 ];
3800 const BASE27_LARGE_MANTISSA: [u128; 76] = [
3801     301829093537629265639465570217176944359,            // 27^-240
3802     217807991453958805640698687941213190524,            // 27^-234
3803     314352208961548438173441007673156326734,            // 27^-228
3804     226845008347394462887832488874694288292,            // 27^-222
3805     327394917835133689224334116987590197085,            // 27^-216
3806     236256977848340413085493360278597848651,            // 27^-210
3807     170489389240119998671196096475026672256,            // 27^-204
3808     246059457021648542224892012444309926233,            // 27^-198
3809     177563121844831037921653709250257605479,            // 27^-192
3810     256268648406457241006138264113659504394,            // 27^-186
3811     184930348919702200346046943747485274024,            // 27^-180
3812     266901426797403574706768528236472000862,            // 27^-174
3813     192603247770383575639211190527648274245,            // 27^-168
3814     277975367137008028446553971650055283412,            // 27^-162
3815     200594500948068090486693848039128919647,            // 27^-156
3816     289508773565335211238455692680966173052,            // 27^-150
3817     208917317212507950117664039252872831665,            // 27^-144
3818     301520709674946766164053267333891939739,            // 27^-138
3819     217585453364802351586979201161384846208,            // 27^-132
3820     314031030021154964119856834958393443507,            // 27^-126
3821     226613236986043931067161987739751269180,            // 27^-120
3822     327060412939660347810097743318775450603,            // 27^-114
3823     236015590119408703302029793810763336632,            // 27^-108
3824     170315197362908885300398426895467760677,            // 27^-102
3825     245808053934833671173174941698733239342,            // 27^-96
3826     177381702616012906692133545122052956869,            // 27^-90
3827     256006814417050404626793229969178591795,            // 27^-84
3828     184741402471039290909022270993420155647,            // 27^-78
3829     266628729119434395515123988465075762881,            // 27^-72
3830     192406461791880080316008520325217417399,            // 27^-66
3831     277691355027891684120101092281051616669,            // 27^-60
3832     200389550171752283164939097875653100692,            // 27^-54
3833     289212977580839036146652597763405686112,            // 27^-48
3834     208703862874796048578293668364396201854,            // 27^-42
3835     301212640893244858516269504216828222245,            // 27^-36
3836     217363142646555453321168098187951653993,            // 27^-30
3837     313710179234688236904530296665341569850,            // 27^-24
3838     226381702429392491474935736226666160567,            // 27^-18
3839     326726249813466247246220462666861782844,            // 27^-12
3840     235774449020380624184618955567855082461,            // 27^-6
3841     170141183460469231731687303715884105728,            // 27^0
3842     245556907710782073166015043857318674432,            // 27^6
3843     177200468746272961345336076752392290304,            // 27^12
3844     255745247947835503562868389206950936576,            // 27^18
3845     184552649072141716781794491390137475072,            // 27^24
3846     266356310061270520809673995345359110719,            // 27^30
3847     192209876872921446586714266254161951235,            // 27^36
3848     277407633098725295421526662764935275289,            // 27^42
3849     200184808797092622572327630249651738267,            // 27^48
3850     288917483816076538023589582665008561757,            // 27^54
3851     208490626626972031635281014538153149532,            // 27^60
3852     300904886870600004067510516586852827477,            // 27^66
3853     217141059066909427380630585083218539864,            // 27^72
3854     313389656266867868879861721401276560157,            // 27^78
3855     226150404435492799169987273137391228527,            // 27^84
3856     326392428107359965184387801150473482685,            // 27^90
3857     235533554299270254021060647605641184828,            // 27^96
3858     339934694701922439619874702371784251126,            // 27^102
3859     245306018087052741642305313258629505287,            // 27^108
3860     177019420046226713314377865847118993119,            // 27^114
3861     255483948725482657093998355855298189652,            // 27^120
3862     184364088525767284952804747951506893851,            // 27^126
3863     266084169338241408156670471179837543899,            // 27^132
3864     192013492808081754945415747456910215687,            // 27^138
3865     277124201053027125645172361985060059244,            // 27^144
3866     199980276610139913759598726349951659975,            // 27^150
3867     288622291962264730584478255384696488209,            // 27^156
3868     208277608246209791806511248482402407710,            // 27^162
3869     300597447285417578884462942447710218615,            // 27^168
3870     216919202393792943992865658673403318648,            // 27^174
3871     313069460782756034010893203297842312622,            // 27^180
3872     225919342762644710883872352816958877073,            // 27^186
3873     326058947472506854027112756453181563499,            // 27^192
3874     235292905704349129354647627776916151748,            // 27^198
3875     339587377705461640362820917278613293254,            // 27^204
3876     245055384801472810432512717678228228007,            // 27^210
3877 ];
3878 const BASE27_LARGE_EXPONENT: [i32; 76] = [
3879     -1269,                                              // 27^-240
3880     -1240,                                              // 27^-234
3881     -1212,                                              // 27^-228
3882     -1183,                                              // 27^-222
3883     -1155,                                              // 27^-216
3884     -1126,                                              // 27^-210
3885     -1097,                                              // 27^-204
3886     -1069,                                              // 27^-198
3887     -1040,                                              // 27^-192
3888     -1012,                                              // 27^-186
3889     -983,                                               // 27^-180
3890     -955,                                               // 27^-174
3891     -926,                                               // 27^-168
3892     -898,                                               // 27^-162
3893     -869,                                               // 27^-156
3894     -841,                                               // 27^-150
3895     -812,                                               // 27^-144
3896     -784,                                               // 27^-138
3897     -755,                                               // 27^-132
3898     -727,                                               // 27^-126
3899     -698,                                               // 27^-120
3900     -670,                                               // 27^-114
3901     -641,                                               // 27^-108
3902     -612,                                               // 27^-102
3903     -584,                                               // 27^-96
3904     -555,                                               // 27^-90
3905     -527,                                               // 27^-84
3906     -498,                                               // 27^-78
3907     -470,                                               // 27^-72
3908     -441,                                               // 27^-66
3909     -413,                                               // 27^-60
3910     -384,                                               // 27^-54
3911     -356,                                               // 27^-48
3912     -327,                                               // 27^-42
3913     -299,                                               // 27^-36
3914     -270,                                               // 27^-30
3915     -242,                                               // 27^-24
3916     -213,                                               // 27^-18
3917     -185,                                               // 27^-12
3918     -156,                                               // 27^-6
3919     -127,                                               // 27^0
3920     -99,                                                // 27^6
3921     -70,                                                // 27^12
3922     -42,                                                // 27^18
3923     -13,                                                // 27^24
3924     15,                                                 // 27^30
3925     44,                                                 // 27^36
3926     72,                                                 // 27^42
3927     101,                                                // 27^48
3928     129,                                                // 27^54
3929     158,                                                // 27^60
3930     186,                                                // 27^66
3931     215,                                                // 27^72
3932     243,                                                // 27^78
3933     272,                                                // 27^84
3934     300,                                                // 27^90
3935     329,                                                // 27^96
3936     357,                                                // 27^102
3937     386,                                                // 27^108
3938     415,                                                // 27^114
3939     443,                                                // 27^120
3940     472,                                                // 27^126
3941     500,                                                // 27^132
3942     529,                                                // 27^138
3943     557,                                                // 27^144
3944     586,                                                // 27^150
3945     614,                                                // 27^156
3946     643,                                                // 27^162
3947     671,                                                // 27^168
3948     700,                                                // 27^174
3949     728,                                                // 27^180
3950     757,                                                // 27^186
3951     785,                                                // 27^192
3952     814,                                                // 27^198
3953     842,                                                // 27^204
3954     871,                                                // 27^210
3955 ];
3956 const BASE27_SMALL_INT_POWERS: [u128; 6] = [1, 27, 729, 19683, 531441, 14348907];
3957 const BASE27_STEP: i32 = 6;
3958 const BASE27_BIAS: i32 = 240;
3959 
3960 // BASE28
3961 
3962 const BASE28_SMALL_MANTISSA: [u128; 6] = [
3963     170141183460469231731687303715884105728,            // 28^0
3964     297747071055821155530452781502797185024,            // 28^1
3965     260528687173843511089146183814947536896,            // 28^2
3966     227962601277113072203002910838079094784,            // 28^3
3967     199467276117473938177627546983319207936,            // 28^4
3968     174533866602789695905424103610404306944,            // 28^5
3969 ];
3970 const BASE28_SMALL_EXPONENT: [i32; 6] = [
3971     -127,                                               // 28^0
3972     -123,                                               // 28^1
3973     -118,                                               // 28^2
3974     -113,                                               // 28^3
3975     -108,                                               // 28^4
3976     -103,                                               // 28^5
3977 ];
3978 const BASE28_LARGE_MANTISSA: [u128; 76] = [
3979     200215143815698040798730279921859793515,            // 28^-240
3980     179711238516029806533278035755362570551,            // 28^-234
3981     322614250185735942212427179391214768413,            // 28^-228
3982     289575530396283324168013345552040300667,            // 28^-222
3983     259920284847963995399800125815215983072,            // 28^-216
3984     233302014099717072256401710525774728336,            // 28^-210
3985     209409703497448836012980688794302909957,            // 28^-204
3986     187964189199610581269006081054389519147,            // 28^-198
3987     337429792711562885676838629607664070711,            // 28^-192
3988     302873822652608199592547515371033250847,            // 28^-186
3989     271856707468083969679745656096547629768,            // 28^-180
3990     244016035285282981482333348801442963368,            // 28^-174
3991     219026508600450572879143037057044702127,            // 28^-168
3992     196596143419909740056291955312532441411,            // 28^-162
3993     176462857644721687377034700397980722042,            // 28^-156
3994     316782817673398770114452445482208770257,            // 28^-150
3995     284341291171704802743493772571841275116,            // 28^-144
3996     255222080727080523208383932871281083497,            // 28^-138
3997     229084950069124576377435007616984162844,            // 28^-132
3998     205624506307086466111975488366169508167,            // 28^-126
3999     184566631641558957302915986868221103411,            // 28^-120
4000     331330561004604641231243330979299081348,            // 28^-114
4001     297399209378286220063892720385616742108,            // 28^-108
4002     266942745850723232302069966588191406954,            // 28^-102
4003     239605309345945263344621501916001364416,            // 28^-96
4004     215067482294014848993159294730496555497,            // 28^-90
4005     193042558474796699288911421705232156812,            // 28^-84
4006     173273193069468359944466704194632400641,            // 28^-78
4007     311056791556242112413125050076207081650,            // 28^-72
4008     279201663740542055384000770694089408486,            // 28^-66
4009     250608799266136415663698628779517553855,            // 28^-60
4010     224944111822980370837543334787608800457,            // 28^-54
4011     201907728667158642949418150287074186439,            // 28^-48
4012     181230486831379296755646484093658378299,            // 28^-42
4013     325341576312636457580643512071759255196,            // 28^-36
4014     292023552792399342330208805478900181690,            // 28^-30
4015     262117606830390855604604612394616145902,            // 28^-24
4016     235274309738072614830216430996812400431,            // 28^-18
4017     211180017596241035935669959185363632952,            // 28^-12
4018     189553206559602063269009666658011215615,            // 28^-6
4019     170141183460469231731687303715884105728,            // 28^0
4020     305434266554881967834492181318207537152,            // 28^6
4021     274154937941858738966065755004164112384,            // 28^12
4022     246078905440687093968343124469641904128,            // 28^18
4023     220878121537715117784741212850409701376,            // 28^24
4024     198258133856129805696540977101424033792,            // 28^30
4025     177954644699400447924746318168681611264,            // 28^36
4026     319460845859371388212562249545703474176,            // 28^42
4027     286745064197610355009611023687762970225,            // 28^48
4028     257379684889104161503034418684704785797,            // 28^54
4029     231021595363755916570056887236303965333,            // 28^60
4030     207362820991138609531788808643065835705,            // 28^66
4031     186126926626483659918254253754028720893,            // 28^72
4032     334131573344103639308512797544978713750,            // 28^78
4033     299913371828921883094842698046640019943,            // 28^84
4034     269199434526831288331795872363961423540,            // 28^90
4035     241630891972710985114650364591580944199,            // 28^96
4036     216885626294688985349681859923056842835,            // 28^102
4037     194674507506895938395726937393857685110,            // 28^108
4038     174738015241079713869620349559402181972,            // 28^114
4039     313686412889065357315780098042512623701,            // 28^120
4040     281561987228284074576142980610683957411,            // 28^126
4041     252727403529513497084111370284014563793,            // 28^132
4042     226845751173734538409794758625366435361,            // 28^138
4043     203614622343740041422835873088956724196,            // 28^144
4044     182762578614186646525232068123189313087,            // 28^150
4045     328091958791815868790390435525895683218,            // 28^156
4046     294492270354449044397893099587906656150,            // 28^162
4047     264333504599995236391965677440014878764,            // 28^168
4048     237263278829077450304247817879793628477,            // 28^174
4049     212965297630021155936008083539885258459,            // 28^180
4050     191155657202715751455043144381591497592,            // 28^186
4051     171579528154314464133715598246382584383,            // 28^192
4052     308016356015425756696586706818979868623,            // 28^198
4053     276472597266073797985814891590470600613,            // 28^204
4054     248159214750338106225838746496027188809,            // 28^210
4055 ];
4056 const BASE28_LARGE_EXPONENT: [i32; 76] = [
4057     -1281,                                              // 28^-240
4058     -1252,                                              // 28^-234
4059     -1224,                                              // 28^-228
4060     -1195,                                              // 28^-222
4061     -1166,                                              // 28^-216
4062     -1137,                                              // 28^-210
4063     -1108,                                              // 28^-204
4064     -1079,                                              // 28^-198
4065     -1051,                                              // 28^-192
4066     -1022,                                              // 28^-186
4067     -993,                                               // 28^-180
4068     -964,                                               // 28^-174
4069     -935,                                               // 28^-168
4070     -906,                                               // 28^-162
4071     -877,                                               // 28^-156
4072     -849,                                               // 28^-150
4073     -820,                                               // 28^-144
4074     -791,                                               // 28^-138
4075     -762,                                               // 28^-132
4076     -733,                                               // 28^-126
4077     -704,                                               // 28^-120
4078     -676,                                               // 28^-114
4079     -647,                                               // 28^-108
4080     -618,                                               // 28^-102
4081     -589,                                               // 28^-96
4082     -560,                                               // 28^-90
4083     -531,                                               // 28^-84
4084     -502,                                               // 28^-78
4085     -474,                                               // 28^-72
4086     -445,                                               // 28^-66
4087     -416,                                               // 28^-60
4088     -387,                                               // 28^-54
4089     -358,                                               // 28^-48
4090     -329,                                               // 28^-42
4091     -301,                                               // 28^-36
4092     -272,                                               // 28^-30
4093     -243,                                               // 28^-24
4094     -214,                                               // 28^-18
4095     -185,                                               // 28^-12
4096     -156,                                               // 28^-6
4097     -127,                                               // 28^0
4098     -99,                                                // 28^6
4099     -70,                                                // 28^12
4100     -41,                                                // 28^18
4101     -12,                                                // 28^24
4102     17,                                                 // 28^30
4103     46,                                                 // 28^36
4104     74,                                                 // 28^42
4105     103,                                                // 28^48
4106     132,                                                // 28^54
4107     161,                                                // 28^60
4108     190,                                                // 28^66
4109     219,                                                // 28^72
4110     247,                                                // 28^78
4111     276,                                                // 28^84
4112     305,                                                // 28^90
4113     334,                                                // 28^96
4114     363,                                                // 28^102
4115     392,                                                // 28^108
4116     421,                                                // 28^114
4117     449,                                                // 28^120
4118     478,                                                // 28^126
4119     507,                                                // 28^132
4120     536,                                                // 28^138
4121     565,                                                // 28^144
4122     594,                                                // 28^150
4123     622,                                                // 28^156
4124     651,                                                // 28^162
4125     680,                                                // 28^168
4126     709,                                                // 28^174
4127     738,                                                // 28^180
4128     767,                                                // 28^186
4129     796,                                                // 28^192
4130     824,                                                // 28^198
4131     853,                                                // 28^204
4132     882,                                                // 28^210
4133 ];
4134 const BASE28_SMALL_INT_POWERS: [u128; 6] = [1, 28, 784, 21952, 614656, 17210368];
4135 const BASE28_STEP: i32 = 6;
4136 const BASE28_BIAS: i32 = 240;
4137 
4138 // BASE29
4139 
4140 const BASE29_SMALL_MANTISSA: [u128; 6] = [
4141     170141183460469231731687303715884105728,            // 29^0
4142     308380895022100482513683237985039941632,            // 29^1
4143     279470186113778562278025434423942447104,            // 29^2
4144     253269856165611822064460549946697842688,            // 29^3
4145     229525807150085713745917373389194919936,            // 29^4
4146     208007762729765178082237619633957896192,            // 29^5
4147 ];
4148 const BASE29_SMALL_EXPONENT: [i32; 6] = [
4149     -127,                                               // 29^0
4150     -123,                                               // 29^1
4151     -118,                                               // 29^2
4152     -113,                                               // 29^3
4153     -108,                                               // 29^4
4154     -103,                                               // 29^5
4155 ];
4156 const BASE29_LARGE_MANTISSA: [u128; 76] = [
4157     180411782640948456163108621039484300353,            // 29^-240
4158     199886291656678749778798199538954577713,            // 29^-234
4159     221462972137332420374365077239613292335,            // 29^-228
4160     245368742505570013761609603669658845854,            // 29^-222
4161     271855015841791437163383377269432435982,            // 29^-216
4162     301200343954417841961395964144914808415,            // 29^-210
4163     333713346863741229059418106803065448261,            // 29^-204
4164     184867979254122350694373980738345610830,            // 29^-198
4165     204823511403978168182734748793342650457,            // 29^-192
4166     226933138952023660037574950865203175761,            // 29^-186
4167     251429385238135556008900174982942596722,            // 29^-180
4168     278569873281449391084528542386060643447,            // 29^-174
4169     308640035159552273337407148073177516540,            // 29^-168
4170     170978056925499484035797671737173759761,            // 29^-162
4171     189434244555519246827735852425496159000,            // 29^-156
4172     209882681179121373738148351480252166035,            // 29^-150
4173     232538419662693834656863635067192575556,            // 29^-144
4174     257639726705579546348788818074016917383,            // 29^-138
4175     285450588652016995453946272087193218261,            // 29^-132
4176     316263487792383250937533050996202736450,            // 29^-126
4177     175201239175822924661859658491633525197,            // 29^-120
4178     194113297257345719179697640426306620561,            // 29^-114
4179     215066813165088318898530949380694999931,            // 29^-108
4180     238282151601732438626757341123945812037,            // 29^-102
4181     264003464487880391063907148518553600721,            // 29^-96
4182     292501258667905961095191488633763572010,            // 29^-90
4183     324075240786231793266420435905585066661,            // 29^-84
4184     179528734626566103050967344518404222838,            // 29^-78
4185     198907923224385351394870557131224024014,            // 29^-72
4186     220378993946205681004466278772642662300,            // 29^-66
4187     244167754534112212293116837315364018708,            // 29^-60
4188     270524387495766270724774864712621178351,            // 29^-54
4189     299726081232954872012689080099923610541,            // 29^-48
4190     332079945186715557451765374774991672241,            // 29^-42
4191     183963119828570739334286542177638201257,            // 29^-36
4192     203820977132676910337518249049241331980,            // 29^-30
4193     225822386345870676314424417535913775896,            // 29^-24
4194     250198732693485636863600410972168425001,            // 29^-18
4195     277206378226597610088077970727216566225,            // 29^-12
4196     307129357939822377568583266911848900855,            // 29^-6
4197     170141183460469231731687303715884105728,            // 29^0
4198     188507034973849692637027842793274343424,            // 29^6
4199     208855384169162106382075974754544648192,            // 29^12
4200     231400231309666912826787170353923751936,            // 29^18
4201     256378676868573301455838684793773426688,            // 29^24
4202     284053415075970164879962990673826094314,            // 29^30
4203     314715496631115750914098978917481871688,            // 29^36
4204     174343694817539847357322592625772163155,            // 29^42
4205     193163185467532912371523116182520814756,            // 29^48
4206     214014141773314894388674508400179209532,            // 29^54
4207     237115849834993471687725998227739696222,            // 29^60
4208     262711266541086358656385267533109039869,            // 29^66
4209     291069574706415032602452081981147446763,            // 29^72
4210     322489014023779685975823216414806216349,            // 29^78
4211     178650008801035774670984867305268298071,            // 29^84
4212     197934343538640677425270715935647505996,            // 29^90
4213     219300321421789265371466533424126863110,            // 29^96
4214     242972644948356100526463281459541324974,            // 29^102
4215     269200272076455967884065094333741996545,            // 29^108
4216     298259034474605889482552078350958780837,            // 29^114
4217     330454538398307869859357548505383554011,            // 29^120
4218     183062689350548673356118481539553806163,            // 29^126
4219     202823349890643162760568057855283073783,            // 29^132
4220     224717070457148091679782830215989826885,            // 29^138
4221     248974103731497779640892318688061490897,            // 29^144
4222     275849556968674066644388728598920812956,            // 29^150
4223     305626074918518590345961283073160340970,            // 29^156
4224     338616812354378462414859289927404969896,            // 29^162
4225     187584363735341677353233362159059264795,            // 29^168
4226     207833115392789061354400140358968381064,            // 29^174
4227     230267613961761833964469003400183663813,            // 29^180
4228     255123799397575000468261630468177681638,            // 29^186
4229     282663080140582027146793786682106989268,            // 29^192
4230     313175082306023963280707662359655742783,            // 29^198
4231     173490347817277081445057491729890113081,            // 29^204
4232     192217724118601260264099717636971309833,            // 29^210
4233 ];
4234 const BASE29_LARGE_EXPONENT: [i32; 76] = [
4235     -1293,                                              // 29^-240
4236     -1264,                                              // 29^-234
4237     -1235,                                              // 29^-228
4238     -1206,                                              // 29^-222
4239     -1177,                                              // 29^-216
4240     -1148,                                              // 29^-210
4241     -1119,                                              // 29^-204
4242     -1089,                                              // 29^-198
4243     -1060,                                              // 29^-192
4244     -1031,                                              // 29^-186
4245     -1002,                                              // 29^-180
4246     -973,                                               // 29^-174
4247     -944,                                               // 29^-168
4248     -914,                                               // 29^-162
4249     -885,                                               // 29^-156
4250     -856,                                               // 29^-150
4251     -827,                                               // 29^-144
4252     -798,                                               // 29^-138
4253     -769,                                               // 29^-132
4254     -740,                                               // 29^-126
4255     -710,                                               // 29^-120
4256     -681,                                               // 29^-114
4257     -652,                                               // 29^-108
4258     -623,                                               // 29^-102
4259     -594,                                               // 29^-96
4260     -565,                                               // 29^-90
4261     -536,                                               // 29^-84
4262     -506,                                               // 29^-78
4263     -477,                                               // 29^-72
4264     -448,                                               // 29^-66
4265     -419,                                               // 29^-60
4266     -390,                                               // 29^-54
4267     -361,                                               // 29^-48
4268     -332,                                               // 29^-42
4269     -302,                                               // 29^-36
4270     -273,                                               // 29^-30
4271     -244,                                               // 29^-24
4272     -215,                                               // 29^-18
4273     -186,                                               // 29^-12
4274     -157,                                               // 29^-6
4275     -127,                                               // 29^0
4276     -98,                                                // 29^6
4277     -69,                                                // 29^12
4278     -40,                                                // 29^18
4279     -11,                                                // 29^24
4280     18,                                                 // 29^30
4281     47,                                                 // 29^36
4282     77,                                                 // 29^42
4283     106,                                                // 29^48
4284     135,                                                // 29^54
4285     164,                                                // 29^60
4286     193,                                                // 29^66
4287     222,                                                // 29^72
4288     251,                                                // 29^78
4289     281,                                                // 29^84
4290     310,                                                // 29^90
4291     339,                                                // 29^96
4292     368,                                                // 29^102
4293     397,                                                // 29^108
4294     426,                                                // 29^114
4295     455,                                                // 29^120
4296     485,                                                // 29^126
4297     514,                                                // 29^132
4298     543,                                                // 29^138
4299     572,                                                // 29^144
4300     601,                                                // 29^150
4301     630,                                                // 29^156
4302     659,                                                // 29^162
4303     689,                                                // 29^168
4304     718,                                                // 29^174
4305     747,                                                // 29^180
4306     776,                                                // 29^186
4307     805,                                                // 29^192
4308     834,                                                // 29^198
4309     864,                                                // 29^204
4310     893,                                                // 29^210
4311 ];
4312 const BASE29_SMALL_INT_POWERS: [u128; 6] = [1, 29, 841, 24389, 707281, 20511149];
4313 const BASE29_STEP: i32 = 6;
4314 const BASE29_BIAS: i32 = 240;
4315 
4316 // BASE30
4317 
4318 const BASE30_SMALL_MANTISSA: [u128; 6] = [
4319     170141183460469231731687303715884105728,            // 30^0
4320     319014718988379809496913694467282698240,            // 30^1
4321     299076299051606071403356588563077529600,            // 30^2
4322     280384030360880691940646801777885184000,            // 30^3
4323     262860028463325648694356376666767360000,            // 30^4
4324     246431276684367795650959103125094400000,            // 30^5
4325 ];
4326 const BASE30_SMALL_EXPONENT: [i32; 6] = [
4327     -127,                                               // 30^0
4328     -123,                                               // 30^1
4329     -118,                                               // 30^2
4330     -113,                                               // 30^3
4331     -108,                                               // 30^4
4332     -103,                                               // 30^5
4333 ];
4334 const BASE30_LARGE_MANTISSA: [u128; 74] = [
4335     293697914606894485088361958296166003399,            // 30^-234
4336     199401546035358756435491021348075025228,            // 30^-228
4337     270761041082025567891957153683056483774,            // 30^-222
4338     183828919146951883093674448351327494412,            // 30^-216
4339     249615464467793559236989678532104461317,            // 30^-210
4340     338944929832632662139396137837142035924,            // 30^-204
4341     230121290169646228383872457298707723793,            // 30^-198
4342     312474408249691315911417866816293319027,            // 30^-192
4343     212149548916169413644283660602828329029,            // 30^-186
4344     288071150257973936473359891361485890787,            // 30^-180
4345     195581343526079319127909243854250027224,            // 30^-174
4346     265573709142416387133758214804806317848,            // 30^-168
4347     180307062310000458937613050074040708794,            // 30^-162
4348     244833246663194772909432488501026624276,            // 30^-156
4349     332451307806128616353452734867573546427,            // 30^-150
4350     225712548373888955751123878842649157480,            // 30^-144
4351     306487917461553679299669913344627685478,            // 30^-138
4352     208085115840167395965624010961720331305,            // 30^-132
4353     282552185370553343852869987471204477403,            // 30^-126
4354     191834329753307055373436045708607941890,            // 30^-120
4355     260485757869036576463347072380734960806,            // 30^-114
4356     176852678401887104140389725347567150767,            // 30^-108
4357     240142648210703765821352805529490956868,            // 30^-102
4358     326082092794781635112624979076905003855,            // 30^-96
4359     221388270750079128888532155889145795079,            // 30^-90
4360     300616117896153936087600778123712697276,            // 30^-84
4361     204098550552778150334824777443135675335,            // 30^-78
4362     277138954685954882938577351637270128950,            // 30^-72
4363     188159102542382767109407940268116001044,            // 30^-66
4364     255495283293346012426090218975127795266,            // 30^-60
4365     173464474753336275982316368848893943009,            // 30^-54
4366     235541913835671069456466721167496749113,            // 30^-48
4367     319834901366763207379289417958082873567,            // 30^-42
4368     217146839104937741700096042539405091508,            // 30^-36
4369     294856812260112936979848919457246198708,            // 30^-30
4370     200188361236473853754168248068850933442,            // 30^-24
4371     271829432512427567293473804075629134624,            // 30^-18
4372     184554286581985369843377175900278276895,            // 30^-12
4373     250600417923680198594596164731872945757,            // 30^-6
4374     170141183460469231731687303715884105728,            // 30^0
4375     231029321891594808422774159179776000000,            // 30^6
4376     313707395752840890251476992000000000000,            // 30^12
4377     212986666247081951232000000000000000000,            // 30^18
4378     289207845356544000000000000000000000000,            // 30^24
4379     196353084654473304748535156250000000000,            // 30^30
4380     266621631967110632288608940143603831529,            // 30^36
4381     181018532909474941844489348460628831000,            // 30^42
4382     245799330046413899594233809090775284541,            // 30^48
4383     333763121820680299409099755486799743829,            // 30^54
4384     226603183715861233202026897808422346833,            // 30^60
4385     307697282971558792524556831461079215336,            // 30^66
4386     208906195393080226844550976655564036201,            // 30^72
4387     283667103278554017412807162817392837984,            // 30^78
4388     192591285603182277357146536646298485706,            // 30^84
4389     261513604232519641878753574965804062932,            // 30^90
4390     177550518406095745907734479894927853604,            // 30^96
4391     241090223040513319460187919146199534233,            // 30^102
4392     327368774631124380764508606973252185538,            // 30^108
4393     222261842997828194477899721342605392688,            // 30^114
4394     301802313971178147521594347169174498450,            // 30^120
4395     204903899584886496461222208185427085841,            // 30^126
4396     278232512618195742220116760148063945729,            // 30^132
4397     188901556375124208702207652989717774500,            // 30^138
4398     256503437827277086943219190518379691262,            // 30^144
4399     174148945301850322989380722761059920238,            // 30^150
4400     236471334705220322048773145103478211637,            // 30^156
4401     321096932515698698858834100478208840422,            // 30^162
4402     218003675159015088778073023304915283497,            // 30^168
4403     296020282788056879712669614682501632104,            // 30^174
4404     200978281118435287206001718625001320433,            // 30^180
4405     272902039690575235287053981567967613406,            // 30^186
4406     185282516232160242762660936045505469826,            // 30^192
4407     251589257890814574386886921482483833102,            // 30^198
4408     170812540689859376035668482781137073721,            // 30^204
4409 ];
4410 const BASE30_LARGE_EXPONENT: [i32; 74] = [
4411     -1276,                                              // 30^-234
4412     -1246,                                              // 30^-228
4413     -1217,                                              // 30^-222
4414     -1187,                                              // 30^-216
4415     -1158,                                              // 30^-210
4416     -1129,                                              // 30^-204
4417     -1099,                                              // 30^-198
4418     -1070,                                              // 30^-192
4419     -1040,                                              // 30^-186
4420     -1011,                                              // 30^-180
4421     -981,                                               // 30^-174
4422     -952,                                               // 30^-168
4423     -922,                                               // 30^-162
4424     -893,                                               // 30^-156
4425     -864,                                               // 30^-150
4426     -834,                                               // 30^-144
4427     -805,                                               // 30^-138
4428     -775,                                               // 30^-132
4429     -746,                                               // 30^-126
4430     -716,                                               // 30^-120
4431     -687,                                               // 30^-114
4432     -657,                                               // 30^-108
4433     -628,                                               // 30^-102
4434     -599,                                               // 30^-96
4435     -569,                                               // 30^-90
4436     -540,                                               // 30^-84
4437     -510,                                               // 30^-78
4438     -481,                                               // 30^-72
4439     -451,                                               // 30^-66
4440     -422,                                               // 30^-60
4441     -392,                                               // 30^-54
4442     -363,                                               // 30^-48
4443     -334,                                               // 30^-42
4444     -304,                                               // 30^-36
4445     -275,                                               // 30^-30
4446     -245,                                               // 30^-24
4447     -216,                                               // 30^-18
4448     -186,                                               // 30^-12
4449     -157,                                               // 30^-6
4450     -127,                                               // 30^0
4451     -98,                                                // 30^6
4452     -69,                                                // 30^12
4453     -39,                                                // 30^18
4454     -10,                                                // 30^24
4455     20,                                                 // 30^30
4456     49,                                                 // 30^36
4457     79,                                                 // 30^42
4458     108,                                                // 30^48
4459     137,                                                // 30^54
4460     167,                                                // 30^60
4461     196,                                                // 30^66
4462     226,                                                // 30^72
4463     255,                                                // 30^78
4464     285,                                                // 30^84
4465     314,                                                // 30^90
4466     344,                                                // 30^96
4467     373,                                                // 30^102
4468     402,                                                // 30^108
4469     432,                                                // 30^114
4470     461,                                                // 30^120
4471     491,                                                // 30^126
4472     520,                                                // 30^132
4473     550,                                                // 30^138
4474     579,                                                // 30^144
4475     609,                                                // 30^150
4476     638,                                                // 30^156
4477     667,                                                // 30^162
4478     697,                                                // 30^168
4479     726,                                                // 30^174
4480     756,                                                // 30^180
4481     785,                                                // 30^186
4482     815,                                                // 30^192
4483     844,                                                // 30^198
4484     874,                                                // 30^204
4485 ];
4486 const BASE30_SMALL_INT_POWERS: [u128; 6] = [1, 30, 900, 27000, 810000, 24300000];
4487 const BASE30_STEP: i32 = 6;
4488 const BASE30_BIAS: i32 = 234;
4489 
4490 // BASE31
4491 
4492 const BASE31_SMALL_MANTISSA: [u128; 6] = [
4493     170141183460469231731687303715884105728,            // 31^0
4494     329648542954659136480144150949525454848,            // 31^1
4495     319347025987326038465139646232352784384,            // 31^2
4496     309367431425222099763104032287591759872,            // 31^3
4497     299699699193183909145507031278604517376,            // 31^4
4498     290334083593396911984709936551148126208,            // 31^5
4499 ];
4500 const BASE31_SMALL_EXPONENT: [i32; 6] = [
4501     -127,                                               // 31^0
4502     -123,                                               // 31^1
4503     -118,                                               // 31^2
4504     -113,                                               // 31^3
4505     -108,                                               // 31^4
4506     -103,                                               // 31^5
4507 ];
4508 const BASE31_LARGE_MANTISSA: [u128; 74] = [
4509     279877549230888994466722529922465951128,            // 31^-234
4510     231333407733284590292354000091386191754,            // 31^-228
4511     191209140142019782313183919746595976478,            // 31^-222
4512     316088675925298444140273004034743674741,            // 31^-216
4513     261263794643914746305034655542823358647,            // 31^-210
4514     215948167684024592485185159022754788335,            // 31^-204
4515     178492435929157837038046463019461592108,            // 31^-198
4516     295066635902569136770934561228011804883,            // 31^-192
4517     243887980937787207068127465341221873783,            // 31^-186
4518     201586150409601608540557644579125879351,            // 31^-180
4519     333242957530806000015262416296943861408,            // 31^-174
4520     275442704070282164877682412643443854572,            // 31^-168
4521     227667776650720372831068985136241988697,            // 31^-162
4522     188179304658062925738530341045324738580,            // 31^-156
4523     311080041475689584245114254221154550706,            // 31^-150
4524     257123896754632869764136622554477725012,            // 31^-144
4525     212526325921342359594316086083656739425,            // 31^-138
4526     175664105047096554749814041961690625344,            // 31^-132
4527     290391109602281582919653498207198252857,            // 31^-126
4528     240023414326551697067636257878891518439,            // 31^-120
4529     198391884324143423870507706735824676989,            // 31^-114
4530     327962502126029666246881442269148110223,            // 31^-108
4531     271078131968920728852328597367236335349,            // 31^-102
4532     224060229920801636254083864004341099802,            // 31^-96
4533     185197478924335716894196793983277050828,            // 31^-90
4534     306150772156692797734166574102932652557,            // 31^-84
4535     253049598289706899575201136976026000492,            // 31^-78
4536     209158705508044155113481306826330986049,            // 31^-72
4537     172880590941369685133685946960988620150,            // 31^-66
4538     285789670113326703641484035227164931190,            // 31^-60
4539     236220084333189890382264913587684321799,            // 31^-54
4540     195248233500715771863466694882341429463,            // 31^-48
4541     322765719034956327944217102842371688313,            // 31^-42
4542     266782719403631527651786656524762917448,            // 31^-36
4543     220509847158485190531810693342620280466,            // 31^-30
4544     182262902194543738831736462131829646508,            // 31^-24
4545     301299610375241462753468658335350302125,            // 31^-18
4546     249039859782804352657429715423616325073,            // 31^-12
4547     205844447270932349829274233837837318735,            // 31^-6
4548     170141183460469231731687303715884105728,            // 31^0
4549     281261143481103258485187751033924747264,            // 31^6
4550     232477020622927971041480650211423420416,            // 31^12
4551     192154395906963839472434931204572053504,            // 31^18
4552     317651282414350176352409831205456445952,            // 31^24
4553     262555370495753687560337482407159416999,            // 31^30
4554     217015722562838525119352550468059930336,            // 31^36
4555     179374825776921533841673613411506136043,            // 31^42
4556     296525318465664137401900073705767585881,            // 31^48
4557     245093658238625334625948305994309525378,            // 31^54
4558     202582705650977753904076181059390370572,            // 31^60
4559     334890367411416504232175148268475073388,            // 31^66
4560     276804374353098300220638069068074602530,            // 31^72
4561     228793268236589371413606590094648720070,            // 31^78
4562     189109582219266748069833984779993889354,            // 31^84
4563     312617887429839722873414506299686714932,            // 31^90
4564     258395006731549634868442333657079980382,            // 31^96
4565     213576964685944914612871149421565862652,            // 31^102
4566     176532512843220607081571440296564925357,            // 31^108
4567     291826678373921783044839874892818001863,            // 31^114
4568     241209986871908117885122799335937441435,            // 31^120
4569     199372648487594099824157002892036768477,            // 31^126
4570     329583807705824908665978895106558273752,            // 31^132
4571     272418225684124763666228455375305707749,            // 31^138
4572     225167887346958248891898253497228074938,            // 31^144
4573     186113015621359245893427982047443315204,            // 31^150
4574     307664249923018427479642383336104189758,            // 31^156
4575     254300566687046383525258086411660098107,            // 31^162
4576     210192696205470376085866529648531617961,            // 31^168
4577     173735238240724141814430167095519087450,            // 31^174
4578     287202491346848457988114640516635531033,            // 31^180
4579     237387854850570349221700427782261535085,            // 31^186
4580     196213456806330839063706448987155946803,            // 31^192
4581     324361333953874416226256763524449662322,            // 31^198
4582     268101578446229760174200876130811505774,            // 31^204
4583 ];
4584 const BASE31_LARGE_EXPONENT: [i32; 74] = [
4585     -1287,                                              // 31^-234
4586     -1257,                                              // 31^-228
4587     -1227,                                              // 31^-222
4588     -1198,                                              // 31^-216
4589     -1168,                                              // 31^-210
4590     -1138,                                              // 31^-204
4591     -1108,                                              // 31^-198
4592     -1079,                                              // 31^-192
4593     -1049,                                              // 31^-186
4594     -1019,                                              // 31^-180
4595     -990,                                               // 31^-174
4596     -960,                                               // 31^-168
4597     -930,                                               // 31^-162
4598     -900,                                               // 31^-156
4599     -871,                                               // 31^-150
4600     -841,                                               // 31^-144
4601     -811,                                               // 31^-138
4602     -781,                                               // 31^-132
4603     -752,                                               // 31^-126
4604     -722,                                               // 31^-120
4605     -692,                                               // 31^-114
4606     -663,                                               // 31^-108
4607     -633,                                               // 31^-102
4608     -603,                                               // 31^-96
4609     -573,                                               // 31^-90
4610     -544,                                               // 31^-84
4611     -514,                                               // 31^-78
4612     -484,                                               // 31^-72
4613     -454,                                               // 31^-66
4614     -425,                                               // 31^-60
4615     -395,                                               // 31^-54
4616     -365,                                               // 31^-48
4617     -336,                                               // 31^-42
4618     -306,                                               // 31^-36
4619     -276,                                               // 31^-30
4620     -246,                                               // 31^-24
4621     -217,                                               // 31^-18
4622     -187,                                               // 31^-12
4623     -157,                                               // 31^-6
4624     -127,                                               // 31^0
4625     -98,                                                // 31^6
4626     -68,                                                // 31^12
4627     -38,                                                // 31^18
4628     -9,                                                 // 31^24
4629     21,                                                 // 31^30
4630     51,                                                 // 31^36
4631     81,                                                 // 31^42
4632     110,                                                // 31^48
4633     140,                                                // 31^54
4634     170,                                                // 31^60
4635     199,                                                // 31^66
4636     229,                                                // 31^72
4637     259,                                                // 31^78
4638     289,                                                // 31^84
4639     318,                                                // 31^90
4640     348,                                                // 31^96
4641     378,                                                // 31^102
4642     408,                                                // 31^108
4643     437,                                                // 31^114
4644     467,                                                // 31^120
4645     497,                                                // 31^126
4646     526,                                                // 31^132
4647     556,                                                // 31^138
4648     586,                                                // 31^144
4649     616,                                                // 31^150
4650     645,                                                // 31^156
4651     675,                                                // 31^162
4652     705,                                                // 31^168
4653     735,                                                // 31^174
4654     764,                                                // 31^180
4655     794,                                                // 31^186
4656     824,                                                // 31^192
4657     853,                                                // 31^198
4658     883,                                                // 31^204
4659 ];
4660 const BASE31_SMALL_INT_POWERS: [u128; 6] = [1, 31, 961, 29791, 923521, 28629151];
4661 const BASE31_STEP: i32 = 6;
4662 const BASE31_BIAS: i32 = 234;
4663 
4664 // BASE33
4665 
4666 const BASE33_SMALL_MANTISSA: [u128; 6] = [
4667     170141183460469231731687303715884105728,            // 33^0
4668     175458095443608895223302531957005484032,            // 33^1
4669     180941160926221673199030736080661905408,            // 33^2
4670     186595572205166100486500446583182589952,            // 33^3
4671     192426683836577541126703585538907045888,            // 33^4
4672     198440017706470589286913072586997891072,            // 33^5
4673 ];
4674 const BASE33_SMALL_EXPONENT: [i32; 6] = [
4675     -127,                                               // 33^0
4676     -122,                                               // 33^1
4677     -117,                                               // 33^2
4678     -112,                                               // 33^3
4679     -107,                                               // 33^4
4680     -102,                                               // 33^5
4681 ];
4682 const BASE33_LARGE_MANTISSA: [u128; 72] = [
4683     312720366502509540124188550868577470271,            // 33^-228
4684     188065849520234218420139418711557486770,            // 33^-222
4685     226200577540468899968415353242546081790,            // 33^-216
4686     272068009211510778916881923005514361559,            // 33^-210
4687     327236130168906522048072439540872358087,            // 33^-204
4688     196795435814493025178219114364462772750,            // 33^-198
4689     236700290627603575579431376108202583063,            // 33^-192
4690     284696783496570703658001718555889571262,            // 33^-186
4691     171212841180688182412693440011648609110,            // 33^-180
4692     205930229524469868245369490973155168397,            // 33^-174
4693     247687376364759110421449812279701734754,            // 33^-168
4694     297911756579516503503766398038992340964,            // 33^-162
4695     179160149400574418614614090847719005026,            // 33^-156
4696     215489039450973655880961058312920063458,            // 33^-150
4697     259184457474862991304220337185522020620,            // 33^-144
4698     311740138466868713435648102307209093287,            // 33^-138
4699     187476353478425047886734580102095167043,            // 33^-132
4700     225491547456297727220699982909970598320,            // 33^-126
4701     271215206775862669602998925081523543654,            // 33^-120
4702     326210402191372960931717472229356291097,            // 33^-114
4703     196178576715647050727159488732861667611,            // 33^-108
4704     235958348989735718000162987087766864735,            // 33^-102
4705     283804395923732956473182174007605293342,            // 33^-96
4706     170676171219393275768862099029406252664,            // 33^-90
4707     205284737238107330416766226733647440005,            // 33^-84
4708     246910995494199118965634147066154669324,            // 33^-78
4709     296977946418022259559609845940558313794,            // 33^-72
4710     178598568447993152099773363289076713958,            // 33^-66
4711     214813584890064968045989415466080479007,            // 33^-60
4712     258372038781252962127704032685119793391,            // 33^-54
4713     310762982974959535779710715380461212334,            // 33^-48
4714     186888705223357570139042022172334279947,            // 33^-42
4715     224784739840635370899218738060963824868,            // 33^-36
4716     270365077465939099085308357449561310080,            // 33^-30
4717     325187889378018709806160016110270251585,            // 33^-24
4718     195563651173574149793648095659417101115,            // 33^-18
4719     235218732982278125085778976978720276897,            // 33^-12
4720     282914805556997697053159518336509943216,            // 33^-6
4721     170141183460469231731687303715884105728,            // 33^0
4722     204641268259797795202129106105341575168,            // 33^6
4723     246137048204490191229033862368809975808,            // 33^12
4724     296047063302535604636168085099824283648,            // 33^18
4725     178038747781766620403928207609098977344,            // 33^24
4726     214140247554538205717741625292909706188,            // 33^30
4727     257562166629747183314707096744136073023,            // 33^36
4728     309788890395834268833431845588643035745,            // 33^42
4729     186302898963108514077454910111746951397,            // 33^48
4730     224080147727111315915564635257325506176,            // 33^54
4731     269517612902775795573733407057825442248,            // 33^60
4732     324168581650849479410768181980047458277,            // 33^66
4733     194950653127503229444535496044715069916,            // 33^72
4734     234481435315497306894208542281087212757,            // 33^78
4735     282028003628468309677795696968404883305,            // 33^84
4736     339215745262040382698593524434347927396,            // 33^90
4737     203999816247443047277506123370388146319,            // 33^96
4738     245365526867526093228395853689144006062,            // 33^102
4739     295119098058174229856749108333084701428,            // 33^108
4740     177480681884243207276442522127875068624,            // 33^114
4741     213469020807909470054649976638820369879,            // 33^120
4742     256754833038160188521579955085771893751,            // 33^126
4743     308817851128733566186038756059234075639,            // 33^132
4744     185718928923909504089695656878457160369,            // 33^138
4745     223377764171191270264346565880758640128,            // 33^144
4746     268672804733672512805858396506074869210,            // 33^150
4747     323152468963460648455199258995519212913,            // 33^156
4748     194339576535660800930047023345366203227,            // 33^162
4749     233746448722509584063702393615930970798,            // 33^168
4750     281143981397731320107155010945727058593,            // 33^174
4751     338152466949356579395454697640846384307,            // 33^180
4752     203360374878824300807265157901557614739,            // 33^186
4753     244596423879111037469845073222731160599,            // 33^192
4754     294194041538814672349638971928150296782,            // 33^198
4755 ];
4756 const BASE33_LARGE_EXPONENT: [i32; 72] = [
4757     -1278,                                              // 33^-228
4758     -1247,                                              // 33^-222
4759     -1217,                                              // 33^-216
4760     -1187,                                              // 33^-210
4761     -1157,                                              // 33^-204
4762     -1126,                                              // 33^-198
4763     -1096,                                              // 33^-192
4764     -1066,                                              // 33^-186
4765     -1035,                                              // 33^-180
4766     -1005,                                              // 33^-174
4767     -975,                                               // 33^-168
4768     -945,                                               // 33^-162
4769     -914,                                               // 33^-156
4770     -884,                                               // 33^-150
4771     -854,                                               // 33^-144
4772     -824,                                               // 33^-138
4773     -793,                                               // 33^-132
4774     -763,                                               // 33^-126
4775     -733,                                               // 33^-120
4776     -703,                                               // 33^-114
4777     -672,                                               // 33^-108
4778     -642,                                               // 33^-102
4779     -612,                                               // 33^-96
4780     -581,                                               // 33^-90
4781     -551,                                               // 33^-84
4782     -521,                                               // 33^-78
4783     -491,                                               // 33^-72
4784     -460,                                               // 33^-66
4785     -430,                                               // 33^-60
4786     -400,                                               // 33^-54
4787     -370,                                               // 33^-48
4788     -339,                                               // 33^-42
4789     -309,                                               // 33^-36
4790     -279,                                               // 33^-30
4791     -249,                                               // 33^-24
4792     -218,                                               // 33^-18
4793     -188,                                               // 33^-12
4794     -158,                                               // 33^-6
4795     -127,                                               // 33^0
4796     -97,                                                // 33^6
4797     -67,                                                // 33^12
4798     -37,                                                // 33^18
4799     -6,                                                 // 33^24
4800     24,                                                 // 33^30
4801     54,                                                 // 33^36
4802     84,                                                 // 33^42
4803     115,                                                // 33^48
4804     145,                                                // 33^54
4805     175,                                                // 33^60
4806     205,                                                // 33^66
4807     236,                                                // 33^72
4808     266,                                                // 33^78
4809     296,                                                // 33^84
4810     326,                                                // 33^90
4811     357,                                                // 33^96
4812     387,                                                // 33^102
4813     417,                                                // 33^108
4814     448,                                                // 33^114
4815     478,                                                // 33^120
4816     508,                                                // 33^126
4817     538,                                                // 33^132
4818     569,                                                // 33^138
4819     599,                                                // 33^144
4820     629,                                                // 33^150
4821     659,                                                // 33^156
4822     690,                                                // 33^162
4823     720,                                                // 33^168
4824     750,                                                // 33^174
4825     780,                                                // 33^180
4826     811,                                                // 33^186
4827     841,                                                // 33^192
4828     871,                                                // 33^198
4829 ];
4830 const BASE33_SMALL_INT_POWERS: [u128; 6] = [1, 33, 1089, 35937, 1185921, 39135393];
4831 const BASE33_STEP: i32 = 6;
4832 const BASE33_BIAS: i32 = 228;
4833 
4834 // BASE34
4835 
4836 const BASE34_SMALL_MANTISSA: [u128; 6] = [
4837     170141183460469231731687303715884105728,            // 34^0
4838     180775007426748558714917760198126862336,            // 34^1
4839     192073445390920343634600120210509791232,            // 34^2
4840     204078035727852865111762627723666653184,            // 34^3
4841     216832912960843669181247791956395819008,            // 34^4
4842     230384970020896398505075778953670557696,            // 34^5
4843 ];
4844 const BASE34_SMALL_EXPONENT: [i32; 6] = [
4845     -127,                                               // 34^0
4846     -122,                                               // 34^1
4847     -117,                                               // 34^2
4848     -112,                                               // 34^3
4849     -107,                                               // 34^4
4850     -102,                                               // 34^5
4851 ];
4852 const BASE34_LARGE_MANTISSA: [u128; 72] = [
4853     177178627816250193201809052313908765038,            // 34^-228
4854     254908880844119689445018585029338745822,            // 34^-222
4855     183370134237042583472660416437030762483,            // 34^-216
4856     263816670637481076390123392064426194701,            // 34^-210
4857     189778002824260993825223275854263893366,            // 34^-204
4858     273035743108558333663040444930692235847,            // 34^-198
4859     196409794352921881357331916371145369426,            // 34^-192
4860     282576976029244796208883094031259474966,            // 34^-186
4861     203273333809293576669182005378991774735,            // 34^-180
4862     292451627295127901322196175360309190338,            // 34^-174
4863     210376719623757394611528557965027181599,            // 34^-168
4864     302671348208910116654395983418902348443,            // 34^-162
4865     217728333226311038599715596529740433091,            // 34^-156
4866     313248197228018957952397977805898800839,            // 34^-150
4867     225336848935989032116058614991615739830,            // 34^-144
4868     324194654192627182361160566056046446660,            // 34^-138
4869     233211244195868906543198111154344051285,            // 34^-132
4870     335523635050871088900625460663893770435,            // 34^-126
4871     241360810165739638162969982622013142483,            // 34^-120
4872     173624253549320755964330470575918052959,            // 34^-114
4873     249795162684930840147804514904540284970,            // 34^-108
4874     179691552375964624115693619162436412029,            // 34^-102
4875     258524253618237975606418771469177669493,            // 34^-96
4876     185970872935167515117533503151908736546,            // 34^-90
4877     267558382598330880564928534158522761469,            // 34^-84
4878     192469624325502244069180532494789364726,            // 34^-78
4879     276908209178500704519431941303594138118,            // 34^-72
4880     199195474556460799929094324231727524305,            // 34^-66
4881     286584765410084542875511011996966308779,            // 34^-60
4882     206156359596095351859662099550265135432,            // 34^-54
4883     296599468859408121472112670217716316867,            // 34^-48
4884     213360492734829033350750838314127106094,            // 34^-42
4885     306964136079605489713373754120772284157,            // 34^-36
4886     220816374276485055706958449270700673524,            // 34^-30
4887     317690996553211397504541477525504659745,            // 34^-24
4888     228532801567968794073232940648013889325,            // 34^-18
4889     328792707121977505492535302517672775182,            // 34^-12
4890     236518879379437072732268269343858967136,            // 34^-6
4891     170141183460469231731687303715884105728,            // 34^0
4892     244784030647202423411643015138274967552,            // 34^6
4893     176086766417174433233313223161344425984,            // 34^12
4894     253338007592048088741599978367647481856,            // 34^18
4895     182240117745863932172015090234506084352,            // 34^24
4896     262190903226072497809728032921351003168,            // 34^30
4897     188608497911442742195268251474898499613,            // 34^36
4898     271353163261640374618023568003458637143,            // 34^42
4899     195199421095732140407812372336079928061,            // 34^48
4900     280835598436492094076350884217966821974,            // 34^54
4901     202020664063606263361049018383687293681,            // 34^60
4902     290649397269553933781951224423558743337,            // 34^66
4903     209080275338955809947349984471742343690,            // 34^72
4904     300806139262500062617960370620227418603,            // 34^78
4905     216386584701305758176605078134277823932,            // 34^84
4906     311317808562643058781928971959145202656,            // 34^90
4907     223948213014292349032159641795245781843,            // 34^96
4908     322196808103274080809106622508050735664,            // 34^102
4909     231774082397596158130210248504430880773,            // 34^108
4910     333455974238137167751959613429477643393,            // 34^114
4911     239873426754333326759263874720553852658,            // 34^120
4912     172554295943652591814138834633669982456,            // 34^126
4913     248255802666326436218178945574152405546,            // 34^132
4914     178584205106164167247426311765412935775,            // 34^138
4915     256931100670110578075784008065054807112,            // 34^144
4916     184824829419575343010846487395966556532,            // 34^150
4917     265909556926979410208640982981191461086,            // 34^156
4918     191283532323968216046404126970062690800,            // 34^162
4919     275201765300840924300371814765015192837,            // 34^168
4920     197967934574808286676526111499839216564,            // 34^174
4921     284818689858133833493377548255268489047,            // 34^180
4922     204885923234829474007514465274285458561,            // 34^186
4923     294771677804553486829405243638525556429,            // 34^192
4924     212045660980140516237478265085420658486,            // 34^198
4925 ];
4926 const BASE34_LARGE_EXPONENT: [i32; 72] = [
4927     -1287,                                              // 34^-228
4928     -1257,                                              // 34^-222
4929     -1226,                                              // 34^-216
4930     -1196,                                              // 34^-210
4931     -1165,                                              // 34^-204
4932     -1135,                                              // 34^-198
4933     -1104,                                              // 34^-192
4934     -1074,                                              // 34^-186
4935     -1043,                                              // 34^-180
4936     -1013,                                              // 34^-174
4937     -982,                                               // 34^-168
4938     -952,                                               // 34^-162
4939     -921,                                               // 34^-156
4940     -891,                                               // 34^-150
4941     -860,                                               // 34^-144
4942     -830,                                               // 34^-138
4943     -799,                                               // 34^-132
4944     -769,                                               // 34^-126
4945     -738,                                               // 34^-120
4946     -707,                                               // 34^-114
4947     -677,                                               // 34^-108
4948     -646,                                               // 34^-102
4949     -616,                                               // 34^-96
4950     -585,                                               // 34^-90
4951     -555,                                               // 34^-84
4952     -524,                                               // 34^-78
4953     -494,                                               // 34^-72
4954     -463,                                               // 34^-66
4955     -433,                                               // 34^-60
4956     -402,                                               // 34^-54
4957     -372,                                               // 34^-48
4958     -341,                                               // 34^-42
4959     -311,                                               // 34^-36
4960     -280,                                               // 34^-30
4961     -250,                                               // 34^-24
4962     -219,                                               // 34^-18
4963     -189,                                               // 34^-12
4964     -158,                                               // 34^-6
4965     -127,                                               // 34^0
4966     -97,                                                // 34^6
4967     -66,                                                // 34^12
4968     -36,                                                // 34^18
4969     -5,                                                 // 34^24
4970     25,                                                 // 34^30
4971     56,                                                 // 34^36
4972     86,                                                 // 34^42
4973     117,                                                // 34^48
4974     147,                                                // 34^54
4975     178,                                                // 34^60
4976     208,                                                // 34^66
4977     239,                                                // 34^72
4978     269,                                                // 34^78
4979     300,                                                // 34^84
4980     330,                                                // 34^90
4981     361,                                                // 34^96
4982     391,                                                // 34^102
4983     422,                                                // 34^108
4984     452,                                                // 34^114
4985     483,                                                // 34^120
4986     514,                                                // 34^126
4987     544,                                                // 34^132
4988     575,                                                // 34^138
4989     605,                                                // 34^144
4990     636,                                                // 34^150
4991     666,                                                // 34^156
4992     697,                                                // 34^162
4993     727,                                                // 34^168
4994     758,                                                // 34^174
4995     788,                                                // 34^180
4996     819,                                                // 34^186
4997     849,                                                // 34^192
4998     880,                                                // 34^198
4999 ];
5000 const BASE34_SMALL_INT_POWERS: [u128; 6] = [1, 34, 1156, 39304, 1336336, 45435424];
5001 const BASE34_STEP: i32 = 6;
5002 const BASE34_BIAS: i32 = 228;
5003 
5004 // BASE35
5005 
5006 const BASE35_SMALL_MANTISSA: [u128; 6] = [
5007     170141183460469231731687303715884105728,            // 35^0
5008     186091919409888222206532988439248240640,            // 35^1
5009     203538036854565243038395456105427763200,            // 35^2
5010     222619727809680734573245030115311616000,            // 35^3
5011     243490327291838303439486751688622080000,            // 35^4
5012     266317545475448144386938634659430400000,            // 35^5
5013 ];
5014 const BASE35_SMALL_EXPONENT: [i32; 6] = [
5015     -127,                                               // 35^0
5016     -122,                                               // 35^1
5017     -117,                                               // 35^2
5018     -112,                                               // 35^3
5019     -107,                                               // 35^4
5020     -102,                                               // 35^5
5021 ];
5022 const BASE35_LARGE_MANTISSA: [u128; 71] = [
5023     209347927024496598038547144935237941328,            // 35^-222
5024     179203738418473223738234323205585013488,            // 35^-216
5025     306800075067366652359189609572260396844,            // 35^-210
5026     262623667597658781475957209306702595701,            // 35^-204
5027     224808259148244964176155115402974869951,            // 35^-198
5028     192437923982884034851744022831878031683,            // 35^-192
5029     329457242604437106875016361913696434196,            // 35^-186
5030     282018410035885035080273518999343445370,            // 35^-180
5031     241410335891937127541744115564170038883,            // 35^-174
5032     206649453374488156391879990784284316065,            // 35^-168
5033     176893820317164915550880607303262990177,            // 35^-162
5034     302845453064861578599747045789577351117,            // 35^-156
5035     259238475028744868618971960605253012775,            // 35^-150
5036     221910503377561727015952290044860359194,            // 35^-144
5037     189957418565367403947310019950147953923,            // 35^-138
5038     325210571999150993462493010696415973233,            // 35^-132
5039     278383221194439940371876875109029372360,            // 35^-126
5040     238298581027663491439386725539968731964,            // 35^-120
5041     203985762777473298078638682440591083627,            // 35^-114
5042     174613676827044081042213382537397413381,            // 35^-108
5043     298941805740831610317914779329181594758,            // 35^-102
5044     255896917250379178747915691007066092001,            // 35^-96
5045     219050099386294168656703063834650082992,            // 35^-90
5046     187508886612326915552639247886565481996,            // 35^-84
5047     321018640549353575448221161417409055741,            // 35^-78
5048     274794889570264049674062490664049677426,            // 35^-72
5049     235226936369523138128743288428339150410,            // 35^-66
5050     201356406883409564599485887013038683702,            // 35^-60
5051     172362924156377643998457025163202983813,            // 35^-54
5052     295088476036816041433113722500648405442,            // 35^-48
5053     252598431814515573631538400793788490787,            // 35^-42
5054     216226565713775509518577464877951003673,            // 35^-36
5055     185091915989032531210622402180350455682,            // 35^-30
5056     316880742672855387564028424008808371736,            // 35^-24
5057     271252811178556028546302550648486766486,            // 35^-18
5058     232194884901007304160476988045002650981,            // 35^-12
5059     198760943121441293094365080225590768425,            // 35^-6
5060     170141183460469231731687303715884105728,            // 35^0
5061     291284815363771407923214131658752000000,            // 35^6
5062     249342463523006462279286784000000000000,            // 35^12
5063     213439427105318371328000000000000000000,            // 35^18
5064     182706099873129286194801330566406250000,            // 35^24
5065     312796181882350172840701732490664710439,            // 35^30
5066     267756389819817671992755772413469185401,            // 35^36
5067     229201916269897841937750664282591869365,            // 35^42
5068     196198934625406481835921498002300001382,            // 35^48
5069     335896161555784742544555459149306885413,            // 35^54
5070     287530183492901554386658282699185698307,            // 35^60
5071     246128464334152340394473578644658105769,            // 35^66
5072     210688214432220328999897334535237907298,            // 35^72
5073     180351036686161310983217274120661055754,            // 35^78
5074     308764270668182755993104788402294107778,            // 35^84
5075     264305036979502132888830858069861274896,            // 35^90
5076     226247526702365186299998179464172492810,            // 35^96
5077     193669950160303864708173829536684422103,            // 35^102
5078     331566493935091266452974274160244175815,            // 35^108
5079     283823948447894890028153679891537227671,            // 35^114
5080     242955893270455896832007072848205740580,            // 35^120
5081     207972464612800582882401068589523181243,            // 35^126
5082     178026330025978501184229413909552478799,            // 35^132
5083     304784330382628027085206214062708598478,            // 35^138
5084     260898171728955674614898641290082042559,            // 35^144
5085     223331218918173589647399860035052277272,            // 35^150
5086     191173564049707817673529979461919468076,            // 35^156
5087     327292635293038256953486831534470016773,            // 35^162
5088     280165486398550695538293601153410149006,            // 35^168
5089     239824216327565160313568077123618791086,            // 35^174
5090     205291720534454460326603808102056989101,            // 35^180
5091     175731588600014458664842906141703880790,            // 35^186
5092     300855691125661557416025651977765954086,            // 35^192
5093     257535220627636274500677259708261311842,            // 35^198
5094 ];
5095 const BASE35_LARGE_EXPONENT: [i32; 71] = [
5096     -1266,                                              // 35^-222
5097     -1235,                                              // 35^-216
5098     -1205,                                              // 35^-210
5099     -1174,                                              // 35^-204
5100     -1143,                                              // 35^-198
5101     -1112,                                              // 35^-192
5102     -1082,                                              // 35^-186
5103     -1051,                                              // 35^-180
5104     -1020,                                              // 35^-174
5105     -989,                                               // 35^-168
5106     -958,                                               // 35^-162
5107     -928,                                               // 35^-156
5108     -897,                                               // 35^-150
5109     -866,                                               // 35^-144
5110     -835,                                               // 35^-138
5111     -805,                                               // 35^-132
5112     -774,                                               // 35^-126
5113     -743,                                               // 35^-120
5114     -712,                                               // 35^-114
5115     -681,                                               // 35^-108
5116     -651,                                               // 35^-102
5117     -620,                                               // 35^-96
5118     -589,                                               // 35^-90
5119     -558,                                               // 35^-84
5120     -528,                                               // 35^-78
5121     -497,                                               // 35^-72
5122     -466,                                               // 35^-66
5123     -435,                                               // 35^-60
5124     -404,                                               // 35^-54
5125     -374,                                               // 35^-48
5126     -343,                                               // 35^-42
5127     -312,                                               // 35^-36
5128     -281,                                               // 35^-30
5129     -251,                                               // 35^-24
5130     -220,                                               // 35^-18
5131     -189,                                               // 35^-12
5132     -158,                                               // 35^-6
5133     -127,                                               // 35^0
5134     -97,                                                // 35^6
5135     -66,                                                // 35^12
5136     -35,                                                // 35^18
5137     -4,                                                 // 35^24
5138     26,                                                 // 35^30
5139     57,                                                 // 35^36
5140     88,                                                 // 35^42
5141     119,                                                // 35^48
5142     149,                                                // 35^54
5143     180,                                                // 35^60
5144     211,                                                // 35^66
5145     242,                                                // 35^72
5146     273,                                                // 35^78
5147     303,                                                // 35^84
5148     334,                                                // 35^90
5149     365,                                                // 35^96
5150     396,                                                // 35^102
5151     426,                                                // 35^108
5152     457,                                                // 35^114
5153     488,                                                // 35^120
5154     519,                                                // 35^126
5155     550,                                                // 35^132
5156     580,                                                // 35^138
5157     611,                                                // 35^144
5158     642,                                                // 35^150
5159     673,                                                // 35^156
5160     703,                                                // 35^162
5161     734,                                                // 35^168
5162     765,                                                // 35^174
5163     796,                                                // 35^180
5164     827,                                                // 35^186
5165     857,                                                // 35^192
5166     888,                                                // 35^198
5167 ];
5168 const BASE35_SMALL_INT_POWERS: [u128; 6] = [1, 35, 1225, 42875, 1500625, 52521875];
5169 const BASE35_STEP: i32 = 6;
5170 const BASE35_BIAS: i32 = 222;
5171 
5172 // BASE36
5173 
5174 const BASE36_SMALL_MANTISSA: [u128; 6] = [
5175     170141183460469231731687303715884105728,            // 36^0
5176     191408831393027885698148216680369618944,            // 36^1
5177     215334935317156371410416743765415821312,            // 36^2
5178     242251802231800917836718836736092798976,            // 36^3
5179     272533277510776032566308691328104398848,            // 36^4
5180     306599937199623036637097277744117448704,            // 36^5
5181 ];
5182 const BASE36_SMALL_EXPONENT: [i32; 6] = [
5183     -127,                                               // 36^0
5184     -122,                                               // 36^1
5185     -117,                                               // 36^2
5186     -112,                                               // 36^3
5187     -107,                                               // 36^4
5188     -102,                                               // 36^5
5189 ];
5190 const BASE36_LARGE_MANTISSA: [u128; 71] = [
5191     206105367118290399407064648402758144682,            // 36^-222
5192     208917317212507950117664039252872831665,            // 36^-216
5193     211767631486382365261996259087726574961,            // 36^-210
5194     214656833352574406771088703014069554755,            // 36^-204
5195     217585453364802351586979201161384846208,            // 36^-198
5196     220554029315269330081435801781477974040,            // 36^-192
5197     223563106333419891448609016293621894840,            // 36^-186
5198     226613236986043931067161987739751269180,            // 36^-180
5199     229704981378746362247969882824709232796,            // 36^-174
5200     232838907258801165579649662968151663564,            // 36^-168
5201     236015590119408703302029793810763336632,            // 36^-162
5202     239235613305375443823879271798297650114,            // 36^-156
5203     242499568120235502703106353919523432682,            // 36^-150
5204     245808053934833671173174941698733239342,            // 36^-144
5205     249161678297389871677290466673500998400,            // 36^-138
5206     252561057045065251911260457800735557729,            // 36^-132
5207     256006814417050404626793229969178591795,            // 36^-126
5208     259499583169196479959998361450291137700,            // 36^-120
5209     263040004690210240376322725691803307553,            // 36^-114
5210     266628729119434395515123988465075762881,            // 36^-108
5211     270266415466234845327287688358055741312,            // 36^-102
5212     273953731731016754981191818978678705632,            // 36^-96
5213     277691355027891684120101092281051616669,            // 36^-90
5214     281479971709018296242657937208050445965,            // 36^-84
5215     285320277490639481303204301467482637509,            // 36^-78
5216     289212977580839036146652597763405686112,            // 36^-72
5217     293158786809041363160730749526943361727,            // 36^-66
5218     297158429757277967604640789526650060843,            // 36^-60
5219     301212640893244858516269504216828222245,            // 36^-54
5220     305322164705175286969651759320250334279,            // 36^-48
5221     309487755838552588810803796052767101096,            // 36^-42
5222     313710179234688236904530296665341569850,            // 36^-36
5223     317990210271190550439415903835536554761,            // 36^-30
5224     322328634904349856025836233807108654402,            // 36^-24
5225     326726249813466247246220462666861782844,            // 36^-18
5226     331183862547146446042592332649497399781,            // 36^-12
5227     335702291671596630919115661345637412333,            // 36^-6
5228     170141183460469231731687303715884105728,            // 36^0
5229     172462464674787958108367218731066064896,            // 36^6
5230     174815415743320440759790006808579407872,            // 36^12
5231     177200468746272961345336076752392290304,            // 36^18
5232     179618061658836457920697688990341398528,            // 36^24
5233     182068638431613361423174859113151594496,            // 36^30
5234     184552649072141716781794491390137475072,            // 36^36
5235     187070549727531559196917812917453861026,            // 36^42
5236     189622802768228720381105803326920695033,            // 36^48
5237     192209876872921446586714266254161951235,            // 36^54
5238     194832247114605420104007752175098574688,            // 36^60
5239     197490395047822988635051696441052554380,            // 36^66
5240     200184808797092622572327630249651738267,            // 36^72
5241     202915983146544838776512848181734408257,            // 36^78
5242     205684419630781050995309380627725821797,            // 36^84
5243     208490626626972031635281014538153149532,            // 36^90
5244     211335119448212897232599978727666183358,            // 36^96
5245     214218420438151760708217936124820030498,            // 36^102
5246     217141059066909427380630585083218539864,            // 36^108
5247     220103572028307748788051030668660629356,            // 36^114
5248     223106503338424488684979682521025988628,            // 36^120
5249     226150404435492799169987273137391228527,            // 36^126
5250     229235834281163651816744244429413474808,            // 36^132
5251     232363359463149818964276081092475750857,            // 36^138
5252     235533554299270254021060647605641184828,            // 36^144
5253     238747000942913976797497733353022683918,            // 36^150
5254     242004289489942830549695955106475311593,            // 36^156
5255     245306018087052741642305313258629505287,            // 36^162
5256     248652793041613380567795520750960012282,            // 36^168
5257     252045228933006394543323172270604972624,            // 36^174
5258     255483948725482657093998355855298189652,            // 36^180
5259     258969583882559258973487053363982248701,            // 36^186
5260     262502774482977247520692697766891651596,            // 36^192
5261     266084169338241408156670471179837543899,            // 36^198
5262 ];
5263 const BASE36_LARGE_EXPONENT: [i32; 71] = [
5264     -1275,                                              // 36^-222
5265     -1244,                                              // 36^-216
5266     -1213,                                              // 36^-210
5267     -1182,                                              // 36^-204
5268     -1151,                                              // 36^-198
5269     -1120,                                              // 36^-192
5270     -1089,                                              // 36^-186
5271     -1058,                                              // 36^-180
5272     -1027,                                              // 36^-174
5273     -996,                                               // 36^-168
5274     -965,                                               // 36^-162
5275     -934,                                               // 36^-156
5276     -903,                                               // 36^-150
5277     -872,                                               // 36^-144
5278     -841,                                               // 36^-138
5279     -810,                                               // 36^-132
5280     -779,                                               // 36^-126
5281     -748,                                               // 36^-120
5282     -717,                                               // 36^-114
5283     -686,                                               // 36^-108
5284     -655,                                               // 36^-102
5285     -624,                                               // 36^-96
5286     -593,                                               // 36^-90
5287     -562,                                               // 36^-84
5288     -531,                                               // 36^-78
5289     -500,                                               // 36^-72
5290     -469,                                               // 36^-66
5291     -438,                                               // 36^-60
5292     -407,                                               // 36^-54
5293     -376,                                               // 36^-48
5294     -345,                                               // 36^-42
5295     -314,                                               // 36^-36
5296     -283,                                               // 36^-30
5297     -252,                                               // 36^-24
5298     -221,                                               // 36^-18
5299     -190,                                               // 36^-12
5300     -159,                                               // 36^-6
5301     -127,                                               // 36^0
5302     -96,                                                // 36^6
5303     -65,                                                // 36^12
5304     -34,                                                // 36^18
5305     -3,                                                 // 36^24
5306     28,                                                 // 36^30
5307     59,                                                 // 36^36
5308     90,                                                 // 36^42
5309     121,                                                // 36^48
5310     152,                                                // 36^54
5311     183,                                                // 36^60
5312     214,                                                // 36^66
5313     245,                                                // 36^72
5314     276,                                                // 36^78
5315     307,                                                // 36^84
5316     338,                                                // 36^90
5317     369,                                                // 36^96
5318     400,                                                // 36^102
5319     431,                                                // 36^108
5320     462,                                                // 36^114
5321     493,                                                // 36^120
5322     524,                                                // 36^126
5323     555,                                                // 36^132
5324     586,                                                // 36^138
5325     617,                                                // 36^144
5326     648,                                                // 36^150
5327     679,                                                // 36^156
5328     710,                                                // 36^162
5329     741,                                                // 36^168
5330     772,                                                // 36^174
5331     803,                                                // 36^180
5332     834,                                                // 36^186
5333     865,                                                // 36^192
5334     896,                                                // 36^198
5335 ];
5336 const BASE36_SMALL_INT_POWERS: [u128; 6] = [1, 36, 1296, 46656, 1679616, 60466176];
5337 const BASE36_STEP: i32 = 6;
5338 const BASE36_BIAS: i32 = 222;
5339 
5340 }}  // cfg_if
5341 
5342 // HIGH LEVEL
5343 // ----------
5344 
5345 pub(crate) const BASE10_POWERS: ModeratePathPowers<u128> = ModeratePathPowers {
5346     small: ExtendedFloatArray { mant: &BASE10_SMALL_MANTISSA, exp: &BASE10_SMALL_EXPONENT },
5347     large: ExtendedFloatArray { mant: &BASE10_LARGE_MANTISSA, exp: &BASE10_LARGE_EXPONENT },
5348     small_int: &BASE10_SMALL_INT_POWERS,
5349     step: BASE10_STEP,
5350     bias: BASE10_BIAS,
5351 };
5352 
5353 cfg_if! {
5354 if #[cfg(feature = "radix")] {
5355 pub(crate) const BASE3_POWERS: ModeratePathPowers<u128> = ModeratePathPowers {
5356     small: ExtendedFloatArray { mant: &BASE3_SMALL_MANTISSA, exp: &BASE3_SMALL_EXPONENT },
5357     large: ExtendedFloatArray { mant: &BASE3_LARGE_MANTISSA, exp: &BASE3_LARGE_EXPONENT },
5358     small_int: &BASE3_SMALL_INT_POWERS,
5359     step: BASE3_STEP,
5360     bias: BASE3_BIAS,
5361 };
5362 
5363 pub(crate) const BASE5_POWERS: ModeratePathPowers<u128> = ModeratePathPowers {
5364     small: ExtendedFloatArray { mant: &BASE5_SMALL_MANTISSA, exp: &BASE5_SMALL_EXPONENT },
5365     large: ExtendedFloatArray { mant: &BASE5_LARGE_MANTISSA, exp: &BASE5_LARGE_EXPONENT },
5366     small_int: &BASE5_SMALL_INT_POWERS,
5367     step: BASE5_STEP,
5368     bias: BASE5_BIAS,
5369 };
5370 
5371 pub(crate) const BASE6_POWERS: ModeratePathPowers<u128> = ModeratePathPowers {
5372     small: ExtendedFloatArray { mant: &BASE6_SMALL_MANTISSA, exp: &BASE6_SMALL_EXPONENT },
5373     large: ExtendedFloatArray { mant: &BASE6_LARGE_MANTISSA, exp: &BASE6_LARGE_EXPONENT },
5374     small_int: &BASE6_SMALL_INT_POWERS,
5375     step: BASE6_STEP,
5376     bias: BASE6_BIAS,
5377 };
5378 
5379 pub(crate) const BASE7_POWERS: ModeratePathPowers<u128> = ModeratePathPowers {
5380     small: ExtendedFloatArray { mant: &BASE7_SMALL_MANTISSA, exp: &BASE7_SMALL_EXPONENT },
5381     large: ExtendedFloatArray { mant: &BASE7_LARGE_MANTISSA, exp: &BASE7_LARGE_EXPONENT },
5382     small_int: &BASE7_SMALL_INT_POWERS,
5383     step: BASE7_STEP,
5384     bias: BASE7_BIAS,
5385 };
5386 
5387 pub(crate) const BASE9_POWERS: ModeratePathPowers<u128> = ModeratePathPowers {
5388     small: ExtendedFloatArray { mant: &BASE9_SMALL_MANTISSA, exp: &BASE9_SMALL_EXPONENT },
5389     large: ExtendedFloatArray { mant: &BASE9_LARGE_MANTISSA, exp: &BASE9_LARGE_EXPONENT },
5390     small_int: &BASE9_SMALL_INT_POWERS,
5391     step: BASE9_STEP,
5392     bias: BASE9_BIAS,
5393 };
5394 
5395 pub(crate) const BASE11_POWERS: ModeratePathPowers<u128> = ModeratePathPowers {
5396     small: ExtendedFloatArray { mant: &BASE11_SMALL_MANTISSA, exp: &BASE11_SMALL_EXPONENT },
5397     large: ExtendedFloatArray { mant: &BASE11_LARGE_MANTISSA, exp: &BASE11_LARGE_EXPONENT },
5398     small_int: &BASE11_SMALL_INT_POWERS,
5399     step: BASE11_STEP,
5400     bias: BASE11_BIAS,
5401 };
5402 
5403 pub(crate) const BASE12_POWERS: ModeratePathPowers<u128> = ModeratePathPowers {
5404     small: ExtendedFloatArray { mant: &BASE12_SMALL_MANTISSA, exp: &BASE12_SMALL_EXPONENT },
5405     large: ExtendedFloatArray { mant: &BASE12_LARGE_MANTISSA, exp: &BASE12_LARGE_EXPONENT },
5406     small_int: &BASE12_SMALL_INT_POWERS,
5407     step: BASE12_STEP,
5408     bias: BASE12_BIAS,
5409 };
5410 
5411 pub(crate) const BASE13_POWERS: ModeratePathPowers<u128> = ModeratePathPowers {
5412     small: ExtendedFloatArray { mant: &BASE13_SMALL_MANTISSA, exp: &BASE13_SMALL_EXPONENT },
5413     large: ExtendedFloatArray { mant: &BASE13_LARGE_MANTISSA, exp: &BASE13_LARGE_EXPONENT },
5414     small_int: &BASE13_SMALL_INT_POWERS,
5415     step: BASE13_STEP,
5416     bias: BASE13_BIAS,
5417 };
5418 
5419 pub(crate) const BASE14_POWERS: ModeratePathPowers<u128> = ModeratePathPowers {
5420     small: ExtendedFloatArray { mant: &BASE14_SMALL_MANTISSA, exp: &BASE14_SMALL_EXPONENT },
5421     large: ExtendedFloatArray { mant: &BASE14_LARGE_MANTISSA, exp: &BASE14_LARGE_EXPONENT },
5422     small_int: &BASE14_SMALL_INT_POWERS,
5423     step: BASE14_STEP,
5424     bias: BASE14_BIAS,
5425 };
5426 
5427 pub(crate) const BASE15_POWERS: ModeratePathPowers<u128> = ModeratePathPowers {
5428     small: ExtendedFloatArray { mant: &BASE15_SMALL_MANTISSA, exp: &BASE15_SMALL_EXPONENT },
5429     large: ExtendedFloatArray { mant: &BASE15_LARGE_MANTISSA, exp: &BASE15_LARGE_EXPONENT },
5430     small_int: &BASE15_SMALL_INT_POWERS,
5431     step: BASE15_STEP,
5432     bias: BASE15_BIAS,
5433 };
5434 
5435 pub(crate) const BASE17_POWERS: ModeratePathPowers<u128> = ModeratePathPowers {
5436     small: ExtendedFloatArray { mant: &BASE17_SMALL_MANTISSA, exp: &BASE17_SMALL_EXPONENT },
5437     large: ExtendedFloatArray { mant: &BASE17_LARGE_MANTISSA, exp: &BASE17_LARGE_EXPONENT },
5438     small_int: &BASE17_SMALL_INT_POWERS,
5439     step: BASE17_STEP,
5440     bias: BASE17_BIAS,
5441 };
5442 
5443 pub(crate) const BASE18_POWERS: ModeratePathPowers<u128> = ModeratePathPowers {
5444     small: ExtendedFloatArray { mant: &BASE18_SMALL_MANTISSA, exp: &BASE18_SMALL_EXPONENT },
5445     large: ExtendedFloatArray { mant: &BASE18_LARGE_MANTISSA, exp: &BASE18_LARGE_EXPONENT },
5446     small_int: &BASE18_SMALL_INT_POWERS,
5447     step: BASE18_STEP,
5448     bias: BASE18_BIAS,
5449 };
5450 
5451 pub(crate) const BASE19_POWERS: ModeratePathPowers<u128> = ModeratePathPowers {
5452     small: ExtendedFloatArray { mant: &BASE19_SMALL_MANTISSA, exp: &BASE19_SMALL_EXPONENT },
5453     large: ExtendedFloatArray { mant: &BASE19_LARGE_MANTISSA, exp: &BASE19_LARGE_EXPONENT },
5454     small_int: &BASE19_SMALL_INT_POWERS,
5455     step: BASE19_STEP,
5456     bias: BASE19_BIAS,
5457 };
5458 
5459 pub(crate) const BASE20_POWERS: ModeratePathPowers<u128> = ModeratePathPowers {
5460     small: ExtendedFloatArray { mant: &BASE20_SMALL_MANTISSA, exp: &BASE20_SMALL_EXPONENT },
5461     large: ExtendedFloatArray { mant: &BASE20_LARGE_MANTISSA, exp: &BASE20_LARGE_EXPONENT },
5462     small_int: &BASE20_SMALL_INT_POWERS,
5463     step: BASE20_STEP,
5464     bias: BASE20_BIAS,
5465 };
5466 
5467 pub(crate) const BASE21_POWERS: ModeratePathPowers<u128> = ModeratePathPowers {
5468     small: ExtendedFloatArray { mant: &BASE21_SMALL_MANTISSA, exp: &BASE21_SMALL_EXPONENT },
5469     large: ExtendedFloatArray { mant: &BASE21_LARGE_MANTISSA, exp: &BASE21_LARGE_EXPONENT },
5470     small_int: &BASE21_SMALL_INT_POWERS,
5471     step: BASE21_STEP,
5472     bias: BASE21_BIAS,
5473 };
5474 
5475 pub(crate) const BASE22_POWERS: ModeratePathPowers<u128> = ModeratePathPowers {
5476     small: ExtendedFloatArray { mant: &BASE22_SMALL_MANTISSA, exp: &BASE22_SMALL_EXPONENT },
5477     large: ExtendedFloatArray { mant: &BASE22_LARGE_MANTISSA, exp: &BASE22_LARGE_EXPONENT },
5478     small_int: &BASE22_SMALL_INT_POWERS,
5479     step: BASE22_STEP,
5480     bias: BASE22_BIAS,
5481 };
5482 
5483 pub(crate) const BASE23_POWERS: ModeratePathPowers<u128> = ModeratePathPowers {
5484     small: ExtendedFloatArray { mant: &BASE23_SMALL_MANTISSA, exp: &BASE23_SMALL_EXPONENT },
5485     large: ExtendedFloatArray { mant: &BASE23_LARGE_MANTISSA, exp: &BASE23_LARGE_EXPONENT },
5486     small_int: &BASE23_SMALL_INT_POWERS,
5487     step: BASE23_STEP,
5488     bias: BASE23_BIAS,
5489 };
5490 
5491 pub(crate) const BASE24_POWERS: ModeratePathPowers<u128> = ModeratePathPowers {
5492     small: ExtendedFloatArray { mant: &BASE24_SMALL_MANTISSA, exp: &BASE24_SMALL_EXPONENT },
5493     large: ExtendedFloatArray { mant: &BASE24_LARGE_MANTISSA, exp: &BASE24_LARGE_EXPONENT },
5494     small_int: &BASE24_SMALL_INT_POWERS,
5495     step: BASE24_STEP,
5496     bias: BASE24_BIAS,
5497 };
5498 
5499 pub(crate) const BASE25_POWERS: ModeratePathPowers<u128> = ModeratePathPowers {
5500     small: ExtendedFloatArray { mant: &BASE25_SMALL_MANTISSA, exp: &BASE25_SMALL_EXPONENT },
5501     large: ExtendedFloatArray { mant: &BASE25_LARGE_MANTISSA, exp: &BASE25_LARGE_EXPONENT },
5502     small_int: &BASE25_SMALL_INT_POWERS,
5503     step: BASE25_STEP,
5504     bias: BASE25_BIAS,
5505 };
5506 
5507 pub(crate) const BASE26_POWERS: ModeratePathPowers<u128> = ModeratePathPowers {
5508     small: ExtendedFloatArray { mant: &BASE26_SMALL_MANTISSA, exp: &BASE26_SMALL_EXPONENT },
5509     large: ExtendedFloatArray { mant: &BASE26_LARGE_MANTISSA, exp: &BASE26_LARGE_EXPONENT },
5510     small_int: &BASE26_SMALL_INT_POWERS,
5511     step: BASE26_STEP,
5512     bias: BASE26_BIAS,
5513 };
5514 
5515 pub(crate) const BASE27_POWERS: ModeratePathPowers<u128> = ModeratePathPowers {
5516     small: ExtendedFloatArray { mant: &BASE27_SMALL_MANTISSA, exp: &BASE27_SMALL_EXPONENT },
5517     large: ExtendedFloatArray { mant: &BASE27_LARGE_MANTISSA, exp: &BASE27_LARGE_EXPONENT },
5518     small_int: &BASE27_SMALL_INT_POWERS,
5519     step: BASE27_STEP,
5520     bias: BASE27_BIAS,
5521 };
5522 
5523 pub(crate) const BASE28_POWERS: ModeratePathPowers<u128> = ModeratePathPowers {
5524     small: ExtendedFloatArray { mant: &BASE28_SMALL_MANTISSA, exp: &BASE28_SMALL_EXPONENT },
5525     large: ExtendedFloatArray { mant: &BASE28_LARGE_MANTISSA, exp: &BASE28_LARGE_EXPONENT },
5526     small_int: &BASE28_SMALL_INT_POWERS,
5527     step: BASE28_STEP,
5528     bias: BASE28_BIAS,
5529 };
5530 
5531 pub(crate) const BASE29_POWERS: ModeratePathPowers<u128> = ModeratePathPowers {
5532     small: ExtendedFloatArray { mant: &BASE29_SMALL_MANTISSA, exp: &BASE29_SMALL_EXPONENT },
5533     large: ExtendedFloatArray { mant: &BASE29_LARGE_MANTISSA, exp: &BASE29_LARGE_EXPONENT },
5534     small_int: &BASE29_SMALL_INT_POWERS,
5535     step: BASE29_STEP,
5536     bias: BASE29_BIAS,
5537 };
5538 
5539 pub(crate) const BASE30_POWERS: ModeratePathPowers<u128> = ModeratePathPowers {
5540     small: ExtendedFloatArray { mant: &BASE30_SMALL_MANTISSA, exp: &BASE30_SMALL_EXPONENT },
5541     large: ExtendedFloatArray { mant: &BASE30_LARGE_MANTISSA, exp: &BASE30_LARGE_EXPONENT },
5542     small_int: &BASE30_SMALL_INT_POWERS,
5543     step: BASE30_STEP,
5544     bias: BASE30_BIAS,
5545 };
5546 
5547 pub(crate) const BASE31_POWERS: ModeratePathPowers<u128> = ModeratePathPowers {
5548     small: ExtendedFloatArray { mant: &BASE31_SMALL_MANTISSA, exp: &BASE31_SMALL_EXPONENT },
5549     large: ExtendedFloatArray { mant: &BASE31_LARGE_MANTISSA, exp: &BASE31_LARGE_EXPONENT },
5550     small_int: &BASE31_SMALL_INT_POWERS,
5551     step: BASE31_STEP,
5552     bias: BASE31_BIAS,
5553 };
5554 
5555 pub(crate) const BASE33_POWERS: ModeratePathPowers<u128> = ModeratePathPowers {
5556     small: ExtendedFloatArray { mant: &BASE33_SMALL_MANTISSA, exp: &BASE33_SMALL_EXPONENT },
5557     large: ExtendedFloatArray { mant: &BASE33_LARGE_MANTISSA, exp: &BASE33_LARGE_EXPONENT },
5558     small_int: &BASE33_SMALL_INT_POWERS,
5559     step: BASE33_STEP,
5560     bias: BASE33_BIAS,
5561 };
5562 
5563 pub(crate) const BASE34_POWERS: ModeratePathPowers<u128> = ModeratePathPowers {
5564     small: ExtendedFloatArray { mant: &BASE34_SMALL_MANTISSA, exp: &BASE34_SMALL_EXPONENT },
5565     large: ExtendedFloatArray { mant: &BASE34_LARGE_MANTISSA, exp: &BASE34_LARGE_EXPONENT },
5566     small_int: &BASE34_SMALL_INT_POWERS,
5567     step: BASE34_STEP,
5568     bias: BASE34_BIAS,
5569 };
5570 
5571 pub(crate) const BASE35_POWERS: ModeratePathPowers<u128> = ModeratePathPowers {
5572     small: ExtendedFloatArray { mant: &BASE35_SMALL_MANTISSA, exp: &BASE35_SMALL_EXPONENT },
5573     large: ExtendedFloatArray { mant: &BASE35_LARGE_MANTISSA, exp: &BASE35_LARGE_EXPONENT },
5574     small_int: &BASE35_SMALL_INT_POWERS,
5575     step: BASE35_STEP,
5576     bias: BASE35_BIAS,
5577 };
5578 
5579 pub(crate) const BASE36_POWERS: ModeratePathPowers<u128> = ModeratePathPowers {
5580     small: ExtendedFloatArray { mant: &BASE36_SMALL_MANTISSA, exp: &BASE36_SMALL_EXPONENT },
5581     large: ExtendedFloatArray { mant: &BASE36_LARGE_MANTISSA, exp: &BASE36_LARGE_EXPONENT },
5582     small_int: &BASE36_SMALL_INT_POWERS,
5583     step: BASE36_STEP,
5584     bias: BASE36_BIAS,
5585 };
5586 
5587 }}  // cfg_if
5588 
5589 /// Get powers from radix.
get_powers(radix: u32) -> &'static ModeratePathPowers<u128>5590 pub(crate) fn get_powers(radix: u32)
5591     -> &'static ModeratePathPowers<u128>
5592 {
5593     debug_assert_radix!(radix);
5594 
5595     #[cfg(not(feature = "radix"))] {
5596         &BASE10_POWERS
5597     }
5598 
5599     #[cfg(feature = "radix")] {
5600         match radix {
5601             3  => &BASE3_POWERS,
5602             5  => &BASE5_POWERS,
5603             6  => &BASE6_POWERS,
5604             7  => &BASE7_POWERS,
5605             9  => &BASE9_POWERS,
5606             10 => &BASE10_POWERS,
5607             11 => &BASE11_POWERS,
5608             12 => &BASE12_POWERS,
5609             13 => &BASE13_POWERS,
5610             14 => &BASE14_POWERS,
5611             15 => &BASE15_POWERS,
5612             17 => &BASE17_POWERS,
5613             18 => &BASE18_POWERS,
5614             19 => &BASE19_POWERS,
5615             20 => &BASE20_POWERS,
5616             21 => &BASE21_POWERS,
5617             22 => &BASE22_POWERS,
5618             23 => &BASE23_POWERS,
5619             24 => &BASE24_POWERS,
5620             25 => &BASE25_POWERS,
5621             26 => &BASE26_POWERS,
5622             27 => &BASE27_POWERS,
5623             28 => &BASE28_POWERS,
5624             29 => &BASE29_POWERS,
5625             30 => &BASE30_POWERS,
5626             31 => &BASE31_POWERS,
5627             33 => &BASE33_POWERS,
5628             34 => &BASE34_POWERS,
5629             35 => &BASE35_POWERS,
5630             36 => &BASE36_POWERS,
5631             // Powers of 2, and others, should already be handled by now.
5632             _  => unreachable!(),
5633         }
5634     }
5635 }
5636 
5637 // TESTS
5638 // -----
5639 
5640 #[cfg(test)]
5641 mod tests {
5642     use crate::util::test::*;
5643     use super::*;
5644 
5645     #[test]
normalization_test()5646     fn normalization_test() {
5647         // Ensure each valid is normalized.
5648         for base in BASE_POWN.iter().cloned() {
5649             let powers = get_powers(base);
5650             for idx in 0..powers.small.len() {
5651                 let fp = powers.get_small(idx);
5652                 assert_eq!(fp.mant.leading_zeros(), 0);
5653             }
5654             for idx in 0..powers.large.len() {
5655                 let fp = powers.get_large(idx);
5656                 assert_eq!(fp.mant.leading_zeros(), 0);
5657             }
5658         }
5659     }
5660 
5661     #[cfg(feature = "radix")]
5662     #[test]
5663     #[should_panic]
pow2_test()5664     fn pow2_test() {
5665         for base in BASE_POW2.iter().cloned() {
5666             let _ = get_powers(base);
5667         }
5668     }
5669 }
5670