1 //! Cached exponents for basen values with 80-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 ~ 26KB 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: [u64; {1}] = ["
23 //! SMALL_EXPONENT_STR = "const BASE{0}_SMALL_EXPONENT: [i32; {1}] = ["
24 //! LARGE_MANTISSA_STR = "const BASE{0}_LARGE_MANTISSA: [u64; {1}] = ["
25 //! LARGE_EXPONENT_STR = "const BASE{0}_LARGE_EXPONENT: [i32; {1}] = ["
26 //! SMALL_INT_STR = "const BASE{0}_SMALL_INT_POWERS: [u64; {1}] = {2};"
27 //! BIAS_STR = "const BASE{0}_BIAS: i32 = {1};"
28 //! EXP_STR = "// {}^{}"
29 //! POWER_STR = """pub(crate) const BASE{0}_POWERS: ModeratePathPowers<u64> = 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 63 + 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 64th bit'''
60 //!
61 //!     while fp[0] >> 64 != 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(30, " ") + 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: [u64; 10] = [
169     9223372036854775808,      // 10^0
170     11529215046068469760,     // 10^1
171     14411518807585587200,     // 10^2
172     18014398509481984000,     // 10^3
173     11258999068426240000,     // 10^4
174     14073748835532800000,     // 10^5
175     17592186044416000000,     // 10^6
176     10995116277760000000,     // 10^7
177     13743895347200000000,     // 10^8
178     17179869184000000000,     // 10^9
179 ];
180 const BASE10_SMALL_EXPONENT: [i32; 10] = [
181     -63,                      // 10^0
182     -60,                      // 10^1
183     -57,                      // 10^2
184     -54,                      // 10^3
185     -50,                      // 10^4
186     -47,                      // 10^5
187     -44,                      // 10^6
188     -40,                      // 10^7
189     -37,                      // 10^8
190     -34,                      // 10^9
191 ];
192 const BASE10_LARGE_MANTISSA: [u64; 66] = [
193     11555125961253852697,     // 10^-350
194     13451937075301367670,     // 10^-340
195     15660115838168849784,     // 10^-330
196     18230774251475056848,     // 10^-320
197     10611707258198326947,     // 10^-310
198     12353653155963782858,     // 10^-300
199     14381545078898527261,     // 10^-290
200     16742321987285426889,     // 10^-280
201     9745314011399999080,      // 10^-270
202     11345038669416679861,     // 10^-260
203     13207363278391631158,     // 10^-250
204     15375394465392026070,     // 10^-240
205     17899314949046850752,     // 10^-230
206     10418772551374772303,     // 10^-220
207     12129047596099288555,     // 10^-210
208     14120069793541087484,     // 10^-200
209     16437924692338667210,     // 10^-190
210     9568131466127621947,      // 10^-180
211     11138771039116687545,     // 10^-170
212     12967236152753102995,     // 10^-160
213     15095849699286165408,     // 10^-150
214     17573882009934360870,     // 10^-140
215     10229345649675443343,     // 10^-130
216     11908525658859223294,     // 10^-120
217     13863348470604074297,     // 10^-110
218     16139061738043178685,     // 10^-100
219     9394170331095332911,      // 10^-90
220     10936253623915059621,     // 10^-80
221     12731474852090538039,     // 10^-70
222     14821387422376473014,     // 10^-60
223     17254365866976409468,     // 10^-50
224     10043362776618689222,     // 10^-40
225     11692013098647223345,     // 10^-30
226     13611294676837538538,     // 10^-20
227     15845632502852867518,     // 10^-10
228     9223372036854775808,      // 10^0
229     10737418240000000000,     // 10^10
230     12500000000000000000,     // 10^20
231     14551915228366851806,     // 10^30
232     16940658945086006781,     // 10^40
233     9860761315262647567,      // 10^50
234     11479437019748901445,     // 10^60
235     13363823550460978230,     // 10^70
236     15557538194652854267,     // 10^80
237     18111358157653424735,     // 10^90
238     10542197943230523224,     // 10^100
239     12272733663244316382,     // 10^110
240     14287342391028437277,     // 10^120
241     16632655625031838749,     // 10^130
242     9681479787123295682,      // 10^140
243     11270725851789228247,     // 10^150
244     13120851772591970218,     // 10^160
245     15274681817498023410,     // 10^170
246     17782069995880619867,     // 10^180
247     10350527006597618960,     // 10^190
248     12049599325514420588,     // 10^200
249     14027579833653779454,     // 10^210
250     16330252207878254650,     // 10^220
251     9505457831475799117,      // 10^230
252     11065809325636130661,     // 10^240
253     12882297539194266616,     // 10^250
254     14996968138956309548,     // 10^260
255     17458768723248864463,     // 10^270
256     10162340898095201970,     // 10^280
257     11830521861667747109,     // 10^290
258     13772540099066387756,     // 10^300
259 ];
260 const BASE10_LARGE_EXPONENT: [i32; 66] = [
261     -1226,                    // 10^-350
262     -1193,                    // 10^-340
263     -1160,                    // 10^-330
264     -1127,                    // 10^-320
265     -1093,                    // 10^-310
266     -1060,                    // 10^-300
267     -1027,                    // 10^-290
268     -994,                     // 10^-280
269     -960,                     // 10^-270
270     -927,                     // 10^-260
271     -894,                     // 10^-250
272     -861,                     // 10^-240
273     -828,                     // 10^-230
274     -794,                     // 10^-220
275     -761,                     // 10^-210
276     -728,                     // 10^-200
277     -695,                     // 10^-190
278     -661,                     // 10^-180
279     -628,                     // 10^-170
280     -595,                     // 10^-160
281     -562,                     // 10^-150
282     -529,                     // 10^-140
283     -495,                     // 10^-130
284     -462,                     // 10^-120
285     -429,                     // 10^-110
286     -396,                     // 10^-100
287     -362,                     // 10^-90
288     -329,                     // 10^-80
289     -296,                     // 10^-70
290     -263,                     // 10^-60
291     -230,                     // 10^-50
292     -196,                     // 10^-40
293     -163,                     // 10^-30
294     -130,                     // 10^-20
295     -97,                      // 10^-10
296     -63,                      // 10^0
297     -30,                      // 10^10
298     3,                        // 10^20
299     36,                       // 10^30
300     69,                       // 10^40
301     103,                      // 10^50
302     136,                      // 10^60
303     169,                      // 10^70
304     202,                      // 10^80
305     235,                      // 10^90
306     269,                      // 10^100
307     302,                      // 10^110
308     335,                      // 10^120
309     368,                      // 10^130
310     402,                      // 10^140
311     435,                      // 10^150
312     468,                      // 10^160
313     501,                      // 10^170
314     534,                      // 10^180
315     568,                      // 10^190
316     601,                      // 10^200
317     634,                      // 10^210
318     667,                      // 10^220
319     701,                      // 10^230
320     734,                      // 10^240
321     767,                      // 10^250
322     800,                      // 10^260
323     833,                      // 10^270
324     867,                      // 10^280
325     900,                      // 10^290
326     933,                      // 10^300
327 ];
328 const BASE10_SMALL_INT_POWERS: [u64; 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: [u64; 20] = [
337     9223372036854775808,      // 3^0
338     13835058055282163712,     // 3^1
339     10376293541461622784,     // 3^2
340     15564440312192434176,     // 3^3
341     11673330234144325632,     // 3^4
342     17509995351216488448,     // 3^5
343     13132496513412366336,     // 3^6
344     9849372385059274752,      // 3^7
345     14774058577588912128,     // 3^8
346     11080543933191684096,     // 3^9
347     16620815899787526144,     // 3^10
348     12465611924840644608,     // 3^11
349     9349208943630483456,      // 3^12
350     14023813415445725184,     // 3^13
351     10517860061584293888,     // 3^14
352     15776790092376440832,     // 3^15
353     11832592569282330624,     // 3^16
354     17748888853923495936,     // 3^17
355     13311666640442621952,     // 3^18
356     9983749980331966464,      // 3^19
357 ];
358 const BASE3_SMALL_EXPONENT: [i32; 20] = [
359     -63,                      // 3^0
360     -62,                      // 3^1
361     -60,                      // 3^2
362     -59,                      // 3^3
363     -57,                      // 3^4
364     -56,                      // 3^5
365     -54,                      // 3^6
366     -52,                      // 3^7
367     -51,                      // 3^8
368     -49,                      // 3^9
369     -48,                      // 3^10
370     -46,                      // 3^11
371     -44,                      // 3^12
372     -43,                      // 3^13
373     -41,                      // 3^14
374     -40,                      // 3^15
375     -38,                      // 3^16
376     -37,                      // 3^17
377     -35,                      // 3^18
378     -33,                      // 3^19
379 ];
380 const BASE3_LARGE_MANTISSA: [u64; 69] = [
381     16362187946641408838,     // 3^-720
382     13283319235448605538,     // 3^-700
383     10783800460320302292,     // 3^-680
384     17509230984627012859,     // 3^-660
385     14214523479040558273,     // 3^-640
386     11539780240125690827,     // 3^-620
387     9368342750761260524,      // 3^-600
388     15211008194170796346,     // 3^-580
389     12348756681875770872,     // 3^-560
390     10025094302862174179,     // 3^-540
391     16277349755993950451,     // 3^-520
392     13214445025385558299,     // 3^-500
393     10727886292707736997,     // 3^-480
394     17418445358572088840,     // 3^-460
395     14140820960965941427,     // 3^-440
396     11479946305982273645,     // 3^-420
397     9319767752666157840,      // 3^-400
398     15132138887857638912,     // 3^-380
399     12284728192712064755,     // 3^-360
400     9973114038089604413,      // 3^-340
401     16192951452641260116,     // 3^-320
402     13145927929137795237,     // 3^-300
403     10672262040895386089,     // 3^-280
404     17328130457353990660,     // 3^-260
405     14067500591556283265,     // 3^-240
406     11420422611687500217,     // 3^-220
407     9271444616666914905,      // 3^-200
408     15053678520084183432,     // 3^-180
409     12221031692227883264,     // 3^-160
410     9921403291771844100,      // 3^-140
411     16108990755761097026,     // 3^-120
412     13077766095064811873,     // 3^-100
413     10616926201665464118,     // 3^-80
414     17238283840257358043,     // 3^-60
415     13994560389365007134,     // 3^-40
416     11361207548643088241,     // 3^-20
417     9223372036854775808,      // 3^0
418     14975624970497949696,     // 3^20
419     12157665459056928801,     // 3^40
420     9869960666451650558,      // 3^60
421     16025465396357318008,     // 3^80
422     13009957681126887596,     // 3^100
423     10561877279594392463,     // 3^120
424     17148903079221976570,     // 3^140
425     13921998383219366688,     // 3^160
426     11302299516591361707,     // 3^180
427     18351097428184282358,     // 3^200
428     14897976129740516999,     // 3^220
429     12094627780758213915,     // 3^240
430     9818784771917617934,      // 3^260
431     15942373117198559022,     // 3^280
432     12942500854835305460,     // 3^300
433     10507113787012386253,     // 3^320
434     17059985758777160561,     // 3^340
435     13849812612167175924,     // 3^360
436     11243696923572004730,     // 3^380
437     18255946711954919292,     // 3^400
438     14820729899390519784,     // 3^420
439     12031916953769783440,     // 3^440
440     9767874225166607426,      // 3^460
441     15859711672757234610,     // 3^480
442     12875393793202830082,     // 3^500
443     10452634243963250834,     // 3^520
444     16971529475976476179,     // 3^540
445     13778001125423815423,     // 3^560
446     11185398185879039609,     // 3^580
447     18161289353620602647,     // 3^600
448     14743884191906938838,     // 3^620
449     11969531283362676572,     // 3^640
450 ];
451 const BASE3_LARGE_EXPONENT: [i32; 69] = [
452     -1205,                    // 3^-720
453     -1173,                    // 3^-700
454     -1141,                    // 3^-680
455     -1110,                    // 3^-660
456     -1078,                    // 3^-640
457     -1046,                    // 3^-620
458     -1014,                    // 3^-600
459     -983,                     // 3^-580
460     -951,                     // 3^-560
461     -919,                     // 3^-540
462     -888,                     // 3^-520
463     -856,                     // 3^-500
464     -824,                     // 3^-480
465     -793,                     // 3^-460
466     -761,                     // 3^-440
467     -729,                     // 3^-420
468     -697,                     // 3^-400
469     -666,                     // 3^-380
470     -634,                     // 3^-360
471     -602,                     // 3^-340
472     -571,                     // 3^-320
473     -539,                     // 3^-300
474     -507,                     // 3^-280
475     -476,                     // 3^-260
476     -444,                     // 3^-240
477     -412,                     // 3^-220
478     -380,                     // 3^-200
479     -349,                     // 3^-180
480     -317,                     // 3^-160
481     -285,                     // 3^-140
482     -254,                     // 3^-120
483     -222,                     // 3^-100
484     -190,                     // 3^-80
485     -159,                     // 3^-60
486     -127,                     // 3^-40
487     -95,                      // 3^-20
488     -63,                      // 3^0
489     -32,                      // 3^20
490     0,                        // 3^40
491     32,                       // 3^60
492     63,                       // 3^80
493     95,                       // 3^100
494     127,                      // 3^120
495     158,                      // 3^140
496     190,                      // 3^160
497     222,                      // 3^180
498     253,                      // 3^200
499     285,                      // 3^220
500     317,                      // 3^240
501     349,                      // 3^260
502     380,                      // 3^280
503     412,                      // 3^300
504     444,                      // 3^320
505     475,                      // 3^340
506     507,                      // 3^360
507     539,                      // 3^380
508     570,                      // 3^400
509     602,                      // 3^420
510     634,                      // 3^440
511     666,                      // 3^460
512     697,                      // 3^480
513     729,                      // 3^500
514     761,                      // 3^520
515     792,                      // 3^540
516     824,                      // 3^560
517     856,                      // 3^580
518     887,                      // 3^600
519     919,                      // 3^620
520     951,                      // 3^640
521 ];
522 const BASE3_SMALL_INT_POWERS: [u64; 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: [u64; 14] = [
529     9223372036854775808,      // 5^0
530     11529215046068469760,     // 5^1
531     14411518807585587200,     // 5^2
532     18014398509481984000,     // 5^3
533     11258999068426240000,     // 5^4
534     14073748835532800000,     // 5^5
535     17592186044416000000,     // 5^6
536     10995116277760000000,     // 5^7
537     13743895347200000000,     // 5^8
538     17179869184000000000,     // 5^9
539     10737418240000000000,     // 5^10
540     13421772800000000000,     // 5^11
541     16777216000000000000,     // 5^12
542     10485760000000000000,     // 5^13
543 ];
544 const BASE5_SMALL_EXPONENT: [i32; 14] = [
545     -63,                      // 5^0
546     -61,                      // 5^1
547     -59,                      // 5^2
548     -57,                      // 5^3
549     -54,                      // 5^4
550     -52,                      // 5^5
551     -50,                      // 5^6
552     -47,                      // 5^7
553     -45,                      // 5^8
554     -43,                      // 5^9
555     -40,                      // 5^10
556     -38,                      // 5^11
557     -36,                      // 5^12
558     -33,                      // 5^13
559 ];
560 const BASE5_LARGE_MANTISSA: [u64; 68] = [
561     15492890949478498119,     // 5^-504
562     11008361120075348168,     // 5^-490
563     15643822052986917253,     // 5^-476
564     11115604119273511155,     // 5^-462
565     15796223521069679172,     // 5^-448
566     11223891875338892399,     // 5^-434
567     15950109677957715915,     // 5^-420
568     11333234566249726012,     // 5^-406
569     16105494987428025427,     // 5^-392
570     11443642469137689536,     // 5^-378
571     16262394054163123565,     // 5^-364
572     11555125961253852697,     // 5^-350
573     16420821625123739831,     // 5^-336
574     11667695520944036383,     // 5^-322
575     16580792590934885855,     // 5^-308
576     11781361728633673532,     // 5^-294
577     16742321987285426889,     // 5^-280
578     11896135267822264502,     // 5^-266
579     16905424996341287883,     // 5^-252
580     12012026926087520367,     // 5^-238
581     17070116948172426941,     // 5^-224
582     12129047596099288555,     // 5^-210
583     17236413322193710308,     // 5^-196
584     12247208276643356092,     // 5^-182
585     17404329748619824289,     // 5^-168
586     12366520073655226703,     // 5^-154
587     17573882009934360870,     // 5^-140
588     12486994201263968925,     // 5^-126
589     17745086042373215101,     // 5^-112
590     12608641982846233347,     // 5^-98
591     17917957937422433684,     // 5^-84
592     12731474852090538039,     // 5^-70
593     18092513943330655534,     // 5^-56
594     12855504354071922204,     // 5^-42
595     18268770466636286477,     // 5^-28
596     12980742146337069071,     // 5^-14
597     9223372036854775808,      // 5^0
598     13107200000000000000,     // 5^14
599     9313225746154785156,      // 5^28
600     13234889800848442797,     // 5^42
601     9403954806578300063,      // 5^56
602     13363823550460978230,     // 5^70
603     9495567745759798747,      // 5^84
604     13494013367335069727,     // 5^98
605     9588073174409622174,      // 5^112
606     13625471488026082303,     // 5^126
607     9681479787123295682,      // 5^140
608     13758210268297397763,     // 5^154
609     9775796363198734982,      // 5^168
610     13892242184281734271,     // 5^182
611     9871031767461413346,      // 5^196
612     14027579833653779454,     // 5^210
613     9967194951097567535,      // 5^224
614     14164235936814247246,     // 5^238
615     10064294952495520794,     // 5^252
616     14302223338085469768,     // 5^266
617     10162340898095201970,     // 5^280
618     14441555006918636608,     // 5^294
619     10261342003245940623,     // 5^308
620     14582244039112794984,     // 5^322
621     10361307573072618726,     // 5^336
622     14724303658045725350,     // 5^350
623     10462247003350260393,     // 5^364
624     14867747215916808149,     // 5^378
625     10564169781387141817,     // 5^392
626     15012588195001998509,     // 5^406
627     10667085486916504429,     // 5^420
628     15158840208921026870,     // 5^434
629 ];
630 const BASE5_LARGE_EXPONENT: [i32; 68] = [
631     -1234,                    // 5^-504
632     -1201,                    // 5^-490
633     -1169,                    // 5^-476
634     -1136,                    // 5^-462
635     -1104,                    // 5^-448
636     -1071,                    // 5^-434
637     -1039,                    // 5^-420
638     -1006,                    // 5^-406
639     -974,                     // 5^-392
640     -941,                     // 5^-378
641     -909,                     // 5^-364
642     -876,                     // 5^-350
643     -844,                     // 5^-336
644     -811,                     // 5^-322
645     -779,                     // 5^-308
646     -746,                     // 5^-294
647     -714,                     // 5^-280
648     -681,                     // 5^-266
649     -649,                     // 5^-252
650     -616,                     // 5^-238
651     -584,                     // 5^-224
652     -551,                     // 5^-210
653     -519,                     // 5^-196
654     -486,                     // 5^-182
655     -454,                     // 5^-168
656     -421,                     // 5^-154
657     -389,                     // 5^-140
658     -356,                     // 5^-126
659     -324,                     // 5^-112
660     -291,                     // 5^-98
661     -259,                     // 5^-84
662     -226,                     // 5^-70
663     -194,                     // 5^-56
664     -161,                     // 5^-42
665     -129,                     // 5^-28
666     -96,                      // 5^-14
667     -63,                      // 5^0
668     -31,                      // 5^14
669     2,                        // 5^28
670     34,                       // 5^42
671     67,                       // 5^56
672     99,                       // 5^70
673     132,                      // 5^84
674     164,                      // 5^98
675     197,                      // 5^112
676     229,                      // 5^126
677     262,                      // 5^140
678     294,                      // 5^154
679     327,                      // 5^168
680     359,                      // 5^182
681     392,                      // 5^196
682     424,                      // 5^210
683     457,                      // 5^224
684     489,                      // 5^238
685     522,                      // 5^252
686     554,                      // 5^266
687     587,                      // 5^280
688     619,                      // 5^294
689     652,                      // 5^308
690     684,                      // 5^322
691     717,                      // 5^336
692     749,                      // 5^350
693     782,                      // 5^364
694     814,                      // 5^378
695     847,                      // 5^392
696     879,                      // 5^406
697     912,                      // 5^420
698     944,                      // 5^434
699 ];
700 const BASE5_SMALL_INT_POWERS: [u64; 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: [u64; 12] = [
707     9223372036854775808,      // 6^0
708     13835058055282163712,     // 6^1
709     10376293541461622784,     // 6^2
710     15564440312192434176,     // 6^3
711     11673330234144325632,     // 6^4
712     17509995351216488448,     // 6^5
713     13132496513412366336,     // 6^6
714     9849372385059274752,      // 6^7
715     14774058577588912128,     // 6^8
716     11080543933191684096,     // 6^9
717     16620815899787526144,     // 6^10
718     12465611924840644608,     // 6^11
719 ];
720 const BASE6_SMALL_EXPONENT: [i32; 12] = [
721     -63,                      // 6^0
722     -61,                      // 6^1
723     -58,                      // 6^2
724     -56,                      // 6^3
725     -53,                      // 6^4
726     -51,                      // 6^5
727     -48,                      // 6^6
728     -45,                      // 6^7
729     -43,                      // 6^8
730     -40,                      // 6^9
731     -38,                      // 6^10
732     -35,                      // 6^11
733 ];
734 const BASE6_LARGE_MANTISSA: [u64; 71] = [
735     11172994339528645078,     // 6^-444
736     11325430459582219446,     // 6^-432
737     11479946305982273645,     // 6^-420
738     11636570252986002899,     // 6^-408
739     11795331061968106016,     // 6^-396
740     11956257886702331980,     // 6^-384
741     12119380278715084095,     // 6^-372
742     12284728192712064755,     // 6^-360
743     12452331992078957377,     // 6^-348
744     12622222454457155586,     // 6^-336
745     12794430777395563548,     // 6^-324
746     12968988584079505325,     // 6^-312
747     13145927929137795237,     // 6^-300
748     13325281304529035642,     // 6^-288
749     13507081645508223020,     // 6^-276
750     13691362336674758052,     // 6^-264
751     13878157218102970303,     // 6^-252
752     14067500591556283265,     // 6^-240
753     14259427226786160917,     // 6^-228
754     14453972367916992462,     // 6^-216
755     14651171739918087751,     // 6^-204
756     14851061555163971849,     // 6^-192
757     15053678520084183432,     // 6^-180
758     15259059841903798156,     // 6^-168
759     15467243235475914756,     // 6^-156
760     15678266930207358578,     // 6^-144
761     15892169677078874302,     // 6^-132
762     16108990755761097026,     // 6^-120
763     16328769981827608423,     // 6^-108
764     16551547714066402526,     // 6^-96
765     16777364861891103792,     // 6^-84
766     17006262892853298360,     // 6^-72
767     17238283840257358043,     // 6^-60
768     17473470310879155380,     // 6^-48
769     17711865492790087155,     // 6^-36
770     17953513163287843146,     // 6^-24
771     18198457696935376453,     // 6^-12
772     9223372036854775808,      // 6^0
773     9349208943630483456,      // 6^12
774     9476762676643233792,      // 6^24
775     9606056659007943744,      // 6^36
776     9737114633407288801,      // 6^48
777     9869960666451650558,      // 6^60
778     10004619153098548172,     // 6^72
779     10141114821132365302,     // 6^84
780     10279472735705195138,     // 6^96
781     10419718303939637392,     // 6^108
782     10561877279594392463,     // 6^120
783     10705975767793509530,     // 6^132
784     10852040229820157048,     // 6^144
785     11000097487975795902,     // 6^156
786     11150174730505647564,     // 6^168
787     11302299516591361707,     // 6^180
788     11456499781411800112,     // 6^192
789     11612803841272866179,     // 6^204
790     11771240398807322073,     // 6^216
791     11931838548245548344,     // 6^228
792     12094627780758213915,     // 6^240
793     12259637989871837542,     // 6^252
794     12426899476958235198,     // 6^264
795     12596442956798861450,     // 6^276
796     12768299563225066619,     // 6^288
797     12942500854835305460,     // 6^300
798     13119078820790347231,     // 6^312
799     13298065886687551351,     // 6^324
800     13479494920515287357,     // 6^336
801     13663399238688592583,     // 6^348
802     13849812612167175924,     // 6^360
803     14038769272656891137,     // 6^372
804     14230303918895818486,     // 6^384
805     14424451723026109070,     // 6^396
806 ];
807 const BASE6_LARGE_EXPONENT: [i32; 71] = [
808     -1211,                    // 6^-444
809     -1180,                    // 6^-432
810     -1149,                    // 6^-420
811     -1118,                    // 6^-408
812     -1087,                    // 6^-396
813     -1056,                    // 6^-384
814     -1025,                    // 6^-372
815     -994,                     // 6^-360
816     -963,                     // 6^-348
817     -932,                     // 6^-336
818     -901,                     // 6^-324
819     -870,                     // 6^-312
820     -839,                     // 6^-300
821     -808,                     // 6^-288
822     -777,                     // 6^-276
823     -746,                     // 6^-264
824     -715,                     // 6^-252
825     -684,                     // 6^-240
826     -653,                     // 6^-228
827     -622,                     // 6^-216
828     -591,                     // 6^-204
829     -560,                     // 6^-192
830     -529,                     // 6^-180
831     -498,                     // 6^-168
832     -467,                     // 6^-156
833     -436,                     // 6^-144
834     -405,                     // 6^-132
835     -374,                     // 6^-120
836     -343,                     // 6^-108
837     -312,                     // 6^-96
838     -281,                     // 6^-84
839     -250,                     // 6^-72
840     -219,                     // 6^-60
841     -188,                     // 6^-48
842     -157,                     // 6^-36
843     -126,                     // 6^-24
844     -95,                      // 6^-12
845     -63,                      // 6^0
846     -32,                      // 6^12
847     -1,                       // 6^24
848     30,                       // 6^36
849     61,                       // 6^48
850     92,                       // 6^60
851     123,                      // 6^72
852     154,                      // 6^84
853     185,                      // 6^96
854     216,                      // 6^108
855     247,                      // 6^120
856     278,                      // 6^132
857     309,                      // 6^144
858     340,                      // 6^156
859     371,                      // 6^168
860     402,                      // 6^180
861     433,                      // 6^192
862     464,                      // 6^204
863     495,                      // 6^216
864     526,                      // 6^228
865     557,                      // 6^240
866     588,                      // 6^252
867     619,                      // 6^264
868     650,                      // 6^276
869     681,                      // 6^288
870     712,                      // 6^300
871     743,                      // 6^312
872     774,                      // 6^324
873     805,                      // 6^336
874     836,                      // 6^348
875     867,                      // 6^360
876     898,                      // 6^372
877     929,                      // 6^384
878     960,                      // 6^396
879 ];
880 const BASE6_SMALL_INT_POWERS: [u64; 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: [u64; 11] = [
887     9223372036854775808,      // 7^0
888     16140901064495857664,     // 7^1
889     14123288431433875456,     // 7^2
890     12357877377504641024,     // 7^3
891     10813142705316560896,     // 7^4
892     9461499867151990784,      // 7^5
893     16557624767515983872,     // 7^6
894     14487921671576485888,     // 7^7
895     12676931462629425152,     // 7^8
896     11092315029800747008,     // 7^9
897     9705775651075653632,      // 7^10
898 ];
899 const BASE7_SMALL_EXPONENT: [i32; 11] = [
900     -63,                      // 7^0
901     -61,                      // 7^1
902     -58,                      // 7^2
903     -55,                      // 7^3
904     -52,                      // 7^4
905     -49,                      // 7^5
906     -47,                      // 7^6
907     -44,                      // 7^7
908     -41,                      // 7^8
909     -38,                      // 7^9
910     -35,                      // 7^10
911 ];
912 const BASE7_LARGE_MANTISSA: [u64; 71] = [
913     12225664820028455743,     // 7^-407
914     11256958357801915874,     // 7^-396
915     10365007820408367996,     // 7^-385
916     9543731415037814164,      // 7^-374
917     17575058485347314089,     // 7^-363
918     16182490230010039076,     // 7^-352
919     14900262793588950961,     // 7^-341
920     13719633267955538670,     // 7^-330
921     12632551493533408059,     // 7^-319
922     11631605169031861852,     // 7^-308
923     10709969310436274791,     // 7^-297
924     9861359714639799269,      // 7^-286
925     18159980220813419398,     // 7^-275
926     16721065408999761282,     // 7^-264
927     15396163707909854531,     // 7^-253
928     14176241233598532153,     // 7^-242
929     13052979906282242272,     // 7^-231
930     12018720733250263776,     // 7^-220
931     11066411585781870352,     // 7^-209
932     10189559113984709052,     // 7^-198
933     9382184471684205580,      // 7^-187
934     17277565098945522629,     // 7^-176
935     15908568875896010079,     // 7^-165
936     14648045730389016129,     // 7^-154
937     13487400745686688174,     // 7^-143
938     12418720027433908743,     // 7^-132
939     11434716742520575143,     // 7^-121
940     10528681433580712628,     // 7^-110
941     9694436270346269630,      // 7^-99
942     17852585851834022264,     // 7^-88
943     16438027581449061548,     // 7^-77
944     15135552519453149331,     // 7^-66
945     13936279698645574929,     // 7^-55
946     12832031839555071753,     // 7^-44
947     11815279593402393441,     // 7^-33
948     10879090202998704701,     // 7^-22
949     10017080231522506848,     // 7^-11
950     9223372036854775808,      // 7^0
951     16985107389382393856,     // 7^11
952     15639284194331952196,     // 7^22
953     14400097950748064600,     // 7^33
954     13259099228230139701,     // 7^44
955     12208508091080056405,     // 7^55
956     11241161050565762112,     // 7^66
957     10350462220447909415,     // 7^77
958     9530338342721952463,      // 7^88
959     17550394753834620135,     // 7^99
960     16159780741186857313,     // 7^110
961     14879352702091044991,     // 7^121
962     13700379997665963732,     // 7^132
963     12614823765422770599,     // 7^143
964     11615282106028126090,     // 7^154
965     10694939613220642893,     // 7^165
966     9847520902748803399,      // 7^176
967     18134495646931893353,     // 7^187
968     16697600117649658875,     // 7^198
969     15374557700263623520,     // 7^209
970     14156347188413069088,     // 7^220
971     13034662175384360011,     // 7^231
972     12001854416615353596,     // 7^242
973     11050881679899153397,     // 7^253
974     10175259727702178785,     // 7^264
975     9369018104186475301,      // 7^275
976     17253318850937371954,     // 7^286
977     15886243791070066478,     // 7^297
978     14627489584451796037,     // 7^308
979     13468473375910191470,     // 7^319
980     12401292376951646786,     // 7^330
981     11418669980349265042,     // 7^341
982     10513906144367477972,     // 7^352
983     9680831708316613461,      // 7^363
984 ];
985 const BASE7_LARGE_EXPONENT: [i32; 71] = [
986     -1206,                    // 7^-407
987     -1175,                    // 7^-396
988     -1144,                    // 7^-385
989     -1113,                    // 7^-374
990     -1083,                    // 7^-363
991     -1052,                    // 7^-352
992     -1021,                    // 7^-341
993     -990,                     // 7^-330
994     -959,                     // 7^-319
995     -928,                     // 7^-308
996     -897,                     // 7^-297
997     -866,                     // 7^-286
998     -836,                     // 7^-275
999     -805,                     // 7^-264
1000     -774,                     // 7^-253
1001     -743,                     // 7^-242
1002     -712,                     // 7^-231
1003     -681,                     // 7^-220
1004     -650,                     // 7^-209
1005     -619,                     // 7^-198
1006     -588,                     // 7^-187
1007     -558,                     // 7^-176
1008     -527,                     // 7^-165
1009     -496,                     // 7^-154
1010     -465,                     // 7^-143
1011     -434,                     // 7^-132
1012     -403,                     // 7^-121
1013     -372,                     // 7^-110
1014     -341,                     // 7^-99
1015     -311,                     // 7^-88
1016     -280,                     // 7^-77
1017     -249,                     // 7^-66
1018     -218,                     // 7^-55
1019     -187,                     // 7^-44
1020     -156,                     // 7^-33
1021     -125,                     // 7^-22
1022     -94,                      // 7^-11
1023     -63,                      // 7^0
1024     -33,                      // 7^11
1025     -2,                       // 7^22
1026     29,                       // 7^33
1027     60,                       // 7^44
1028     91,                       // 7^55
1029     122,                      // 7^66
1030     153,                      // 7^77
1031     184,                      // 7^88
1032     214,                      // 7^99
1033     245,                      // 7^110
1034     276,                      // 7^121
1035     307,                      // 7^132
1036     338,                      // 7^143
1037     369,                      // 7^154
1038     400,                      // 7^165
1039     431,                      // 7^176
1040     461,                      // 7^187
1041     492,                      // 7^198
1042     523,                      // 7^209
1043     554,                      // 7^220
1044     585,                      // 7^231
1045     616,                      // 7^242
1046     647,                      // 7^253
1047     678,                      // 7^264
1048     709,                      // 7^275
1049     739,                      // 7^286
1050     770,                      // 7^297
1051     801,                      // 7^308
1052     832,                      // 7^319
1053     863,                      // 7^330
1054     894,                      // 7^341
1055     925,                      // 7^352
1056     956,                      // 7^363
1057 ];
1058 const BASE7_SMALL_INT_POWERS: [u64; 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: [u64; 10] = [
1065     9223372036854775808,      // 9^0
1066     10376293541461622784,     // 9^1
1067     11673330234144325632,     // 9^2
1068     13132496513412366336,     // 9^3
1069     14774058577588912128,     // 9^4
1070     16620815899787526144,     // 9^5
1071     9349208943630483456,      // 9^6
1072     10517860061584293888,     // 9^7
1073     11832592569282330624,     // 9^8
1074     13311666640442621952,     // 9^9
1075 ];
1076 const BASE9_SMALL_EXPONENT: [i32; 10] = [
1077     -63,                      // 9^0
1078     -60,                      // 9^1
1079     -57,                      // 9^2
1080     -54,                      // 9^3
1081     -51,                      // 9^4
1082     -48,                      // 9^5
1083     -44,                      // 9^6
1084     -41,                      // 9^7
1085     -38,                      // 9^8
1086     -35,                      // 9^9
1087 ];
1088 const BASE9_LARGE_MANTISSA: [u64; 69] = [
1089     16362187946641408838,     // 9^-360
1090     13283319235448605538,     // 9^-350
1091     10783800460320302292,     // 9^-340
1092     17509230984627012859,     // 9^-330
1093     14214523479040558273,     // 9^-320
1094     11539780240125690827,     // 9^-310
1095     9368342750761260524,      // 9^-300
1096     15211008194170796346,     // 9^-290
1097     12348756681875770872,     // 9^-280
1098     10025094302862174179,     // 9^-270
1099     16277349755993950451,     // 9^-260
1100     13214445025385558299,     // 9^-250
1101     10727886292707736997,     // 9^-240
1102     17418445358572088840,     // 9^-230
1103     14140820960965941427,     // 9^-220
1104     11479946305982273645,     // 9^-210
1105     9319767752666157840,      // 9^-200
1106     15132138887857638912,     // 9^-190
1107     12284728192712064755,     // 9^-180
1108     9973114038089604413,      // 9^-170
1109     16192951452641260116,     // 9^-160
1110     13145927929137795237,     // 9^-150
1111     10672262040895386089,     // 9^-140
1112     17328130457353990660,     // 9^-130
1113     14067500591556283265,     // 9^-120
1114     11420422611687500217,     // 9^-110
1115     9271444616666914905,      // 9^-100
1116     15053678520084183432,     // 9^-90
1117     12221031692227883264,     // 9^-80
1118     9921403291771844100,      // 9^-70
1119     16108990755761097026,     // 9^-60
1120     13077766095064811873,     // 9^-50
1121     10616926201665464118,     // 9^-40
1122     17238283840257358043,     // 9^-30
1123     13994560389365007134,     // 9^-20
1124     11361207548643088241,     // 9^-10
1125     9223372036854775808,      // 9^0
1126     14975624970497949696,     // 9^10
1127     12157665459056928801,     // 9^20
1128     9869960666451650558,      // 9^30
1129     16025465396357318008,     // 9^40
1130     13009957681126887596,     // 9^50
1131     10561877279594392463,     // 9^60
1132     17148903079221976570,     // 9^70
1133     13921998383219366688,     // 9^80
1134     11302299516591361707,     // 9^90
1135     18351097428184282358,     // 9^100
1136     14897976129740516999,     // 9^110
1137     12094627780758213915,     // 9^120
1138     9818784771917617934,      // 9^130
1139     15942373117198559022,     // 9^140
1140     12942500854835305460,     // 9^150
1141     10507113787012386253,     // 9^160
1142     17059985758777160561,     // 9^170
1143     13849812612167175924,     // 9^180
1144     11243696923572004730,     // 9^190
1145     18255946711954919292,     // 9^200
1146     14820729899390519784,     // 9^210
1147     12031916953769783440,     // 9^220
1148     9767874225166607426,      // 9^230
1149     15859711672757234610,     // 9^240
1150     12875393793202830082,     // 9^250
1151     10452634243963250834,     // 9^260
1152     16971529475976476179,     // 9^270
1153     13778001125423815423,     // 9^280
1154     11185398185879039609,     // 9^290
1155     18161289353620602647,     // 9^300
1156     14743884191906938838,     // 9^310
1157     11969531283362676572,     // 9^320
1158 ];
1159 const BASE9_LARGE_EXPONENT: [i32; 69] = [
1160     -1205,                    // 9^-360
1161     -1173,                    // 9^-350
1162     -1141,                    // 9^-340
1163     -1110,                    // 9^-330
1164     -1078,                    // 9^-320
1165     -1046,                    // 9^-310
1166     -1014,                    // 9^-300
1167     -983,                     // 9^-290
1168     -951,                     // 9^-280
1169     -919,                     // 9^-270
1170     -888,                     // 9^-260
1171     -856,                     // 9^-250
1172     -824,                     // 9^-240
1173     -793,                     // 9^-230
1174     -761,                     // 9^-220
1175     -729,                     // 9^-210
1176     -697,                     // 9^-200
1177     -666,                     // 9^-190
1178     -634,                     // 9^-180
1179     -602,                     // 9^-170
1180     -571,                     // 9^-160
1181     -539,                     // 9^-150
1182     -507,                     // 9^-140
1183     -476,                     // 9^-130
1184     -444,                     // 9^-120
1185     -412,                     // 9^-110
1186     -380,                     // 9^-100
1187     -349,                     // 9^-90
1188     -317,                     // 9^-80
1189     -285,                     // 9^-70
1190     -254,                     // 9^-60
1191     -222,                     // 9^-50
1192     -190,                     // 9^-40
1193     -159,                     // 9^-30
1194     -127,                     // 9^-20
1195     -95,                      // 9^-10
1196     -63,                      // 9^0
1197     -32,                      // 9^10
1198     0,                        // 9^20
1199     32,                       // 9^30
1200     63,                       // 9^40
1201     95,                       // 9^50
1202     127,                      // 9^60
1203     158,                      // 9^70
1204     190,                      // 9^80
1205     222,                      // 9^90
1206     253,                      // 9^100
1207     285,                      // 9^110
1208     317,                      // 9^120
1209     349,                      // 9^130
1210     380,                      // 9^140
1211     412,                      // 9^150
1212     444,                      // 9^160
1213     475,                      // 9^170
1214     507,                      // 9^180
1215     539,                      // 9^190
1216     570,                      // 9^200
1217     602,                      // 9^210
1218     634,                      // 9^220
1219     666,                      // 9^230
1220     697,                      // 9^240
1221     729,                      // 9^250
1222     761,                      // 9^260
1223     792,                      // 9^270
1224     824,                      // 9^280
1225     856,                      // 9^290
1226     887,                      // 9^300
1227     919,                      // 9^310
1228     951,                      // 9^320
1229 ];
1230 const BASE9_SMALL_INT_POWERS: [u64; 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: [u64; 9] = [
1237     9223372036854775808,      // 11^0
1238     12682136550675316736,     // 11^1
1239     17437937757178560512,     // 11^2
1240     11988582208060260352,     // 11^3
1241     16484300536082857984,     // 11^4
1242     11332956618556964864,     // 11^5
1243     15582815350515826688,     // 11^6
1244     10713185553479630848,     // 11^7
1245     14730630136034492416,     // 11^8
1246 ];
1247 const BASE11_SMALL_EXPONENT: [i32; 9] = [
1248     -63,                      // 11^0
1249     -60,                      // 11^1
1250     -57,                      // 11^2
1251     -53,                      // 11^3
1252     -50,                      // 11^4
1253     -46,                      // 11^5
1254     -43,                      // 11^6
1255     -39,                      // 11^7
1256     -36,                      // 11^8
1257 ];
1258 const BASE11_LARGE_MANTISSA: [u64; 70] = [
1259     9282833781626869722,      // 11^-333
1260     10192597509046958613,     // 11^-324
1261     11191522591630754840,     // 11^-315
1262     12288347284174558846,     // 11^-306
1263     13492666233761944748,     // 11^-297
1264     14815014410453217040,     // 11^-288
1265     16266959263598494876,     // 11^-279
1266     17861201909926315464,     // 11^-270
1267     9805844119283264859,      // 11^-261
1268     10766865452458105492,     // 11^-252
1269     11822071640254585128,     // 11^-243
1270     12980693265318349774,     // 11^-234
1271     14252865553152120313,     // 11^-225
1272     15649717031600177225,     // 11^-216
1273     17183466879401827195,     // 11^-207
1274     9433765907692842627,      // 11^-198
1275     10358321731667433590,     // 11^-189
1276     11373488609595385666,     // 11^-180
1277     12488146873940825498,     // 11^-171
1278     13712047173770907127,     // 11^-162
1279     15055895770097238115,     // 11^-153
1280     16531448190583591098,     // 11^-144
1281     18151612062879235750,     // 11^-135
1282     9965280013064351107,      // 11^-126
1283     10941926854184612877,     // 11^-117
1284     12014289927163860584,     // 11^-108
1285     13191749897208336388,     // 11^-99
1286     14484606781216284322,     // 11^-90
1287     15904170048801172427,     // 11^-81
1288     17462857553661839031,     // 11^-72
1289     9587152080358667750,      // 11^-63
1290     10526740509619734750,     // 11^-54
1291     11558413262671798860,     // 11^-45
1292     12691195059726361470,     // 11^-36
1293     13934995088312952370,     // 11^-27
1294     15300693685460773821,     // 11^-18
1295     16800237515163846269,     // 11^-9
1296     9223372036854775808,      // 11^0
1297     10127308218523713536,     // 11^9
1298     11119834626984462962,     // 11^18
1299     12209633543621683835,     // 11^27
1300     13406238156435497652,     // 11^36
1301     14720115953107913248,     // 11^45
1302     16162760287003157808,     // 11^54
1303     17746790917089950882,     // 11^63
1304     9743032200637278641,      // 11^72
1305     10697897654413860244,     // 11^81
1306     11746344656115154606,     // 11^90
1307     12897544661339799796,     // 11^99
1308     14161567973799797658,     // 11^108
1309     15549471836891389165,     // 11^117
1310     17073397158676562691,     // 11^126
1311     9373337358196117359,      // 11^135
1312     10291970884763903381,     // 11^144
1313     11300635050781198339,     // 11^153
1314     12408153305213523269,     // 11^162
1315     13624213838764580644,     // 11^171
1316     14959454332853289890,     // 11^180
1317     16425555014410689631,     // 11^189
1318     18035340830508227153,     // 11^198
1319     9901446818303059920,      // 11^207
1320     10871837689903097542,     // 11^216
1321     11937331677337075986,     // 11^225
1322     13107249357401447067,     // 11^234
1323     14391824769622635037,     // 11^243
1324     15802294940132787091,     // 11^252
1325     17350998179329134782,     // 11^261
1326     9525741006595626773,      // 11^270
1327     10459310846201225147,     // 11^279
1328     11484375157976259923,     // 11^288
1329 ];
1330 const BASE11_LARGE_EXPONENT: [i32; 70] = [
1331     -1215,                    // 11^-333
1332     -1184,                    // 11^-324
1333     -1153,                    // 11^-315
1334     -1122,                    // 11^-306
1335     -1091,                    // 11^-297
1336     -1060,                    // 11^-288
1337     -1029,                    // 11^-279
1338     -998,                     // 11^-270
1339     -966,                     // 11^-261
1340     -935,                     // 11^-252
1341     -904,                     // 11^-243
1342     -873,                     // 11^-234
1343     -842,                     // 11^-225
1344     -811,                     // 11^-216
1345     -780,                     // 11^-207
1346     -748,                     // 11^-198
1347     -717,                     // 11^-189
1348     -686,                     // 11^-180
1349     -655,                     // 11^-171
1350     -624,                     // 11^-162
1351     -593,                     // 11^-153
1352     -562,                     // 11^-144
1353     -531,                     // 11^-135
1354     -499,                     // 11^-126
1355     -468,                     // 11^-117
1356     -437,                     // 11^-108
1357     -406,                     // 11^-99
1358     -375,                     // 11^-90
1359     -344,                     // 11^-81
1360     -313,                     // 11^-72
1361     -281,                     // 11^-63
1362     -250,                     // 11^-54
1363     -219,                     // 11^-45
1364     -188,                     // 11^-36
1365     -157,                     // 11^-27
1366     -126,                     // 11^-18
1367     -95,                      // 11^-9
1368     -63,                      // 11^0
1369     -32,                      // 11^9
1370     -1,                       // 11^18
1371     30,                       // 11^27
1372     61,                       // 11^36
1373     92,                       // 11^45
1374     123,                      // 11^54
1375     154,                      // 11^63
1376     186,                      // 11^72
1377     217,                      // 11^81
1378     248,                      // 11^90
1379     279,                      // 11^99
1380     310,                      // 11^108
1381     341,                      // 11^117
1382     372,                      // 11^126
1383     404,                      // 11^135
1384     435,                      // 11^144
1385     466,                      // 11^153
1386     497,                      // 11^162
1387     528,                      // 11^171
1388     559,                      // 11^180
1389     590,                      // 11^189
1390     621,                      // 11^198
1391     653,                      // 11^207
1392     684,                      // 11^216
1393     715,                      // 11^225
1394     746,                      // 11^234
1395     777,                      // 11^243
1396     808,                      // 11^252
1397     839,                      // 11^261
1398     871,                      // 11^270
1399     902,                      // 11^279
1400     933,                      // 11^288
1401 ];
1402 const BASE11_SMALL_INT_POWERS: [u64; 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: [u64; 9] = [
1409     9223372036854775808,      // 12^0
1410     13835058055282163712,     // 12^1
1411     10376293541461622784,     // 12^2
1412     15564440312192434176,     // 12^3
1413     11673330234144325632,     // 12^4
1414     17509995351216488448,     // 12^5
1415     13132496513412366336,     // 12^6
1416     9849372385059274752,      // 12^7
1417     14774058577588912128,     // 12^8
1418 ];
1419 const BASE12_SMALL_EXPONENT: [i32; 9] = [
1420     -63,                      // 12^0
1421     -60,                      // 12^1
1422     -56,                      // 12^2
1423     -53,                      // 12^3
1424     -49,                      // 12^4
1425     -46,                      // 12^5
1426     -42,                      // 12^6
1427     -38,                      // 12^7
1428     -35,                      // 12^8
1429 ];
1430 const BASE12_LARGE_MANTISSA: [u64; 68] = [
1431     12794430777395563548,     // 12^-324
1432     15370653136686821126,     // 12^-315
1433     9232805349408163458,      // 12^-306
1434     11091876690210014731,     // 12^-297
1435     13325281304529035642,     // 12^-288
1436     16008393061343079134,     // 12^-279
1437     9615881366772943927,      // 12^-270
1438     11552086971569327107,     // 12^-261
1439     13878157218102970303,     // 12^-252
1440     16672593293696335722,     // 12^-243
1441     10014851495355986817,     // 12^-234
1442     12031391722600823274,     // 12^-225
1443     14453972367916992462,     // 12^-216
1444     17364351691754770668,     // 12^-207
1445     10430375193750279268,     // 12^-198
1446     12530583187169601247,     // 12^-189
1447     15053678520084183432,     // 12^-180
1448     18084811664478575592,     // 12^-171
1449     10863139281980340679,     // 12^-162
1450     13050486479932803075,     // 12^-153
1451     15678266930207358578,     // 12^-144
1452     9417582030861555141,      // 12^-135
1453     11313859076748534537,     // 12^-126
1454     13591960950173425616,     // 12^-117
1455     16328769981827608423,     // 12^-108
1456     9808324571298608904,      // 12^-99
1457     11783279573783601017,     // 12^-90
1458     14155901602220618825,     // 12^-81
1459     17006262892853298360,     // 12^-72
1460     10215279312745101062,     // 12^-63
1461     12272176679245716810,     // 12^-54
1462     14743240574804287352,     // 12^-45
1463     17711865492790087155,     // 12^-36
1464     10639118911577981124,     // 12^-27
1465     12781358492223474271,     // 12^-18
1466     15354948681789223882,     // 12^-9
1467     9223372036854775808,      // 12^0
1468     11080543933191684096,     // 12^9
1469     13311666640442621952,     // 12^18
1470     15992037016835457024,     // 12^27
1471     9606056659007943744,      // 12^36
1472     11540284009964194135,     // 12^45
1473     13863977671394362375,     // 12^54
1474     16655558624637160317,     // 12^63
1475     10004619153098548172,     // 12^72
1476     12019099047267988506,     // 12^81
1477     14439204501182606065,     // 12^90
1478     17346610241502516795,     // 12^99
1479     10419718303939637392,     // 12^108
1480     12517780479519279956,     // 12^117
1481     15038297923484984581,     // 12^126
1482     18066334108151547333,     // 12^135
1483     10852040229820157048,     // 12^144
1484     13037152578341684032,     // 12^153
1485     15662248181121787524,     // 12^162
1486     9407959928864140132,      // 12^171
1487     11302299516591361707,     // 12^180
1488     13578073815006577911,     // 12^189
1489     16312086602830473207,     // 12^198
1490     9798303241073980839,      // 12^207
1491     11771240398807322073,     // 12^216
1492     14141438279402131370,     // 12^225
1493     16988887307951181138,     // 12^234
1494     10204842190014742991,     // 12^243
1495     12259637989871837542,     // 12^252
1496     14728177157876426901,     // 12^261
1497     17693768981840924725,     // 12^270
1498     10628248744799039348,     // 12^279
1499 ];
1500 const BASE12_LARGE_EXPONENT: [i32; 68] = [
1501     -1225,                    // 12^-324
1502     -1193,                    // 12^-315
1503     -1160,                    // 12^-306
1504     -1128,                    // 12^-297
1505     -1096,                    // 12^-288
1506     -1064,                    // 12^-279
1507     -1031,                    // 12^-270
1508     -999,                     // 12^-261
1509     -967,                     // 12^-252
1510     -935,                     // 12^-243
1511     -902,                     // 12^-234
1512     -870,                     // 12^-225
1513     -838,                     // 12^-216
1514     -806,                     // 12^-207
1515     -773,                     // 12^-198
1516     -741,                     // 12^-189
1517     -709,                     // 12^-180
1518     -677,                     // 12^-171
1519     -644,                     // 12^-162
1520     -612,                     // 12^-153
1521     -580,                     // 12^-144
1522     -547,                     // 12^-135
1523     -515,                     // 12^-126
1524     -483,                     // 12^-117
1525     -451,                     // 12^-108
1526     -418,                     // 12^-99
1527     -386,                     // 12^-90
1528     -354,                     // 12^-81
1529     -322,                     // 12^-72
1530     -289,                     // 12^-63
1531     -257,                     // 12^-54
1532     -225,                     // 12^-45
1533     -193,                     // 12^-36
1534     -160,                     // 12^-27
1535     -128,                     // 12^-18
1536     -96,                      // 12^-9
1537     -63,                      // 12^0
1538     -31,                      // 12^9
1539     1,                        // 12^18
1540     33,                       // 12^27
1541     66,                       // 12^36
1542     98,                       // 12^45
1543     130,                      // 12^54
1544     162,                      // 12^63
1545     195,                      // 12^72
1546     227,                      // 12^81
1547     259,                      // 12^90
1548     291,                      // 12^99
1549     324,                      // 12^108
1550     356,                      // 12^117
1551     388,                      // 12^126
1552     420,                      // 12^135
1553     453,                      // 12^144
1554     485,                      // 12^153
1555     517,                      // 12^162
1556     550,                      // 12^171
1557     582,                      // 12^180
1558     614,                      // 12^189
1559     646,                      // 12^198
1560     679,                      // 12^207
1561     711,                      // 12^216
1562     743,                      // 12^225
1563     775,                      // 12^234
1564     808,                      // 12^243
1565     840,                      // 12^252
1566     872,                      // 12^261
1567     904,                      // 12^270
1568     937,                      // 12^279
1569 ];
1570 const BASE12_SMALL_INT_POWERS: [u64; 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: [u64; 8] = [
1577     9223372036854775808,      // 13^0
1578     14987979559889010688,     // 13^1
1579     12177733392409821184,     // 13^2
1580     9894408381332979712,      // 13^3
1581     16078413619666092032,     // 13^4
1582     13063711065978699776,     // 13^5
1583     10614265241107693568,     // 13^6
1584     17248181016800002048,     // 13^7
1585 ];
1586 const BASE13_SMALL_EXPONENT: [i32; 8] = [
1587     -63,                      // 13^0
1588     -60,                      // 13^1
1589     -56,                      // 13^2
1590     -52,                      // 13^3
1591     -49,                      // 13^4
1592     -45,                      // 13^5
1593     -41,                      // 13^6
1594     -38,                      // 13^7
1595 ];
1596 const BASE13_LARGE_MANTISSA: [u64; 74] = [
1597     12711851154623003921,     // 13^-312
1598     9657300550123029827,      // 13^-304
1599     14673465379822171777,     // 13^-296
1600     11147555423761605318,     // 13^-288
1601     16937783776246970219,     // 13^-280
1602     12867777209673117558,     // 13^-272
1603     9775758889423702247,      // 13^-264
1604     14853452979012869128,     // 13^-256
1605     11284293521111612769,     // 13^-248
1606     17145545948207386966,     // 13^-240
1607     13025615884242430727,     // 13^-232
1608     9895670261906581517,      // 13^-224
1609     15035648341334079534,     // 13^-216
1610     11422708874734959378,     // 13^-208
1611     17355856571645749915,     // 13^-200
1612     13185390638896427802,     // 13^-192
1613     10017052490761162429,     // 13^-184
1614     15220078547640608376,     // 13^-176
1615     11562822058185475244,     // 13^-168
1616     17568746906366835671,     // 13^-160
1617     13347125221972482607,     // 13^-152
1618     10139923617799671626,     // 13^-144
1619     15406771010966328102,     // 13^-136
1620     11704653897376229735,     // 13^-128
1621     17784248595614306423,     // 13^-120
1622     13510843673109724761,     // 13^-112
1623     10264301906138736839,     // 13^-104
1624     15595753480598751694,     // 13^-96
1625     11848225473675019323,     // 13^-88
1626     18002393670774046392,     // 13^-80
1627     13676570326822204041,     // 13^-72
1628     10390205842913949994,     // 13^-64
1629     15787054046203585657,     // 13^-56
1630     11993558127037825287,     // 13^-48
1631     18223214556135190308,     // 13^-40
1632     13844329816115883890,     // 13^-32
1633     10517654142027727687,     // 13^-24
1634     15980701141999875583,     // 13^-16
1635     12140673459180707010,     // 13^-8
1636     9223372036854775808,      // 13^0
1637     14014147076150001664,     // 13^8
1638     10646665746930877456,     // 13^16
1639     16176723550986364864,     // 13^24
1640     12289593336790602348,     // 13^32
1641     9336507724055083356,      // 13^40
1642     14186047347943339851,     // 13^48
1643     10777259833438283283,     // 13^56
1644     16375150409219694755,     // 13^64
1645     12440339894775512302,     // 13^72
1646     9451031155744840189,      // 13^80
1647     14360056182125959135,     // 13^88
1648     10909455812579128852,     // 13^96
1649     16576011210145081669,     // 13^104
1650     12592935539554553092,     // 13^112
1651     9566959354269653198,      // 13^120
1652     14536199442736950948,     // 13^128
1653     11043273333482082198,     // 13^136
1654     16779335808980115413,     // 13^144
1655     12747402952388364654,     // 13^152
1656     9684309550774553205,      // 13^160
1657     14714503311068774005,     // 13^168
1658     11178732286295870598,     // 13^176
1659     16985154427152329948,     // 13^184
1660     12903765092750370582,     // 13^192
1661     9803099187765169579,      // 13^200
1662     14894994289558746218,     // 13^208
1663     11315852805145679810,     // 13^216
1664     17193497656791206265,     // 13^224
1665     13062045201739390598,     // 13^232
1666     9923345921700320715,      // 13^240
1667     15077699205728270417,     // 13^248
1668     11454655271125817073,     // 13^256
1669     17404396465275275042,     // 13^264
1670     13222266805534112801,     // 13^272
1671 ];
1672 const BASE13_LARGE_EXPONENT: [i32; 74] = [
1673     -1218,                    // 13^-312
1674     -1188,                    // 13^-304
1675     -1159,                    // 13^-296
1676     -1129,                    // 13^-288
1677     -1100,                    // 13^-280
1678     -1070,                    // 13^-272
1679     -1040,                    // 13^-264
1680     -1011,                    // 13^-256
1681     -981,                     // 13^-248
1682     -952,                     // 13^-240
1683     -922,                     // 13^-232
1684     -892,                     // 13^-224
1685     -863,                     // 13^-216
1686     -833,                     // 13^-208
1687     -804,                     // 13^-200
1688     -774,                     // 13^-192
1689     -744,                     // 13^-184
1690     -715,                     // 13^-176
1691     -685,                     // 13^-168
1692     -656,                     // 13^-160
1693     -626,                     // 13^-152
1694     -596,                     // 13^-144
1695     -567,                     // 13^-136
1696     -537,                     // 13^-128
1697     -508,                     // 13^-120
1698     -478,                     // 13^-112
1699     -448,                     // 13^-104
1700     -419,                     // 13^-96
1701     -389,                     // 13^-88
1702     -360,                     // 13^-80
1703     -330,                     // 13^-72
1704     -300,                     // 13^-64
1705     -271,                     // 13^-56
1706     -241,                     // 13^-48
1707     -212,                     // 13^-40
1708     -182,                     // 13^-32
1709     -152,                     // 13^-24
1710     -123,                     // 13^-16
1711     -93,                      // 13^-8
1712     -63,                      // 13^0
1713     -34,                      // 13^8
1714     -4,                       // 13^16
1715     25,                       // 13^24
1716     55,                       // 13^32
1717     85,                       // 13^40
1718     114,                      // 13^48
1719     144,                      // 13^56
1720     173,                      // 13^64
1721     203,                      // 13^72
1722     233,                      // 13^80
1723     262,                      // 13^88
1724     292,                      // 13^96
1725     321,                      // 13^104
1726     351,                      // 13^112
1727     381,                      // 13^120
1728     410,                      // 13^128
1729     440,                      // 13^136
1730     469,                      // 13^144
1731     499,                      // 13^152
1732     529,                      // 13^160
1733     558,                      // 13^168
1734     588,                      // 13^176
1735     617,                      // 13^184
1736     647,                      // 13^192
1737     677,                      // 13^200
1738     706,                      // 13^208
1739     736,                      // 13^216
1740     765,                      // 13^224
1741     795,                      // 13^232
1742     825,                      // 13^240
1743     854,                      // 13^248
1744     884,                      // 13^256
1745     913,                      // 13^264
1746     943,                      // 13^272
1747 ];
1748 const BASE13_SMALL_INT_POWERS: [u64; 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: [u64; 8] = [
1755     9223372036854775808,      // 14^0
1756     16140901064495857664,     // 14^1
1757     14123288431433875456,     // 14^2
1758     12357877377504641024,     // 14^3
1759     10813142705316560896,     // 14^4
1760     9461499867151990784,      // 14^5
1761     16557624767515983872,     // 14^6
1762     14487921671576485888,     // 14^7
1763 ];
1764 const BASE14_SMALL_EXPONENT: [i32; 8] = [
1765     -63,                      // 14^0
1766     -60,                      // 14^1
1767     -56,                      // 14^2
1768     -52,                      // 14^3
1769     -48,                      // 14^4
1770     -44,                      // 14^5
1771     -41,                      // 14^6
1772     -37,                      // 14^7
1773 ];
1774 const BASE14_LARGE_MANTISSA: [u64; 72] = [
1775     13636466802170654447,     // 14^-304
1776     9371223146631740442,      // 14^-296
1777     12880143300754023535,     // 14^-288
1778     17702928299982570560,     // 14^-280
1779     12165767999490239948,     // 14^-272
1780     16721065408999761282,     // 14^-264
1781     11491014312609104256,     // 14^-256
1782     15793659877858943182,     // 14^-248
1783     10853684694473876180,     // 14^-240
1784     14917691321465419740,     // 14^-232
1785     10251703482589146278,     // 14^-224
1786     14090306875260685218,     // 14^-216
1787     9683110137559136558,      // 14^-208
1788     13308811903980028150,     // 14^-200
1789     18292105715960495534,     // 14^-192
1790     12570661225733134820,     // 14^-184
1791     17277565098945522629,     // 14^-176
1792     11873450822826176619,     // 14^-168
1793     16319294256419936609,     // 14^-160
1794     11214910012329090474,     // 14^-152
1795     15414172280784786485,     // 14^-144
1796     10592894050889065017,     // 14^-136
1797     14559251360287507272,     // 14^-128
1798     10005377149705503250,     // 14^-120
1799     13751747178554400168,     // 14^-112
1800     9450445876917551117,      // 14^-104
1801     12989029846596759700,     // 14^-96
1802     17852585851834022264,     // 14^-88
1803     12268615337757900164,     // 14^-80
1804     16862422458582420498,     // 14^-72
1805     11588157397706317457,     // 14^-64
1806     15927176798452085633,     // 14^-56
1807     10945439903127358164,     // 14^-48
1808     15043802952525257461,     // 14^-40
1809     10338369644227094261,     // 14^-32
1810     14209423938610553080,     // 14^-24
1811     9764969507542378307,      // 14^-16
1812     13421322341453983785,     // 14^-8
1813     9223372036854775808,      // 14^0
1814     12676931462629425152,     // 14^8
1815     17423626702474969088,     // 14^16
1816     11973826961285400900,     // 14^24
1817     16457254800854930971,     // 14^32
1818     11309718958523667683,     // 14^40
1819     15544481077627229210,     // 14^48
1820     10682444579695049354,     // 14^56
1821     14682332800738954595,     // 14^64
1822     10089960910324183248,     // 14^72
1823     13868002115678253630,     // 14^80
1824     9530338342721952463,      // 14^88
1825     13098836900821174211,     // 14^96
1826     18003508583233548621,     // 14^104
1827     12372332129971187630,     // 14^112
1828     17004974516675479989,     // 14^120
1829     11686121713960805382,     // 14^128
1830     16061822448435536582,     // 14^136
1831     11037970794744924274,     // 14^144
1832     15170980709914287138,     // 14^152
1833     10425768466889213611,     // 14^160
1834     14329547997401095751,     // 14^168
1835     9847520902748803399,      // 14^176
1836     13534783923074532648,     // 14^184
1837     9301344858947275744,      // 14^192
1838     12784100090075520076,     // 14^200
1839     17570923086015569737,     // 14^208
1840     12075051662586407952,     // 14^216
1841     16596381640322157656,     // 14^224
1842     11405329403461315009,     // 14^232
1843     15675891482926176126,     // 14^240
1844     10772752153475797540,     // 14^248
1845     14806454750802381310,     // 14^256
1846     10175259727702178785,     // 14^264
1847 ];
1848 const BASE14_LARGE_EXPONENT: [i32; 72] = [
1849     -1221,                    // 14^-304
1850     -1190,                    // 14^-296
1851     -1160,                    // 14^-288
1852     -1130,                    // 14^-280
1853     -1099,                    // 14^-272
1854     -1069,                    // 14^-264
1855     -1038,                    // 14^-256
1856     -1008,                    // 14^-248
1857     -977,                     // 14^-240
1858     -947,                     // 14^-232
1859     -916,                     // 14^-224
1860     -886,                     // 14^-216
1861     -855,                     // 14^-208
1862     -825,                     // 14^-200
1863     -795,                     // 14^-192
1864     -764,                     // 14^-184
1865     -734,                     // 14^-176
1866     -703,                     // 14^-168
1867     -673,                     // 14^-160
1868     -642,                     // 14^-152
1869     -612,                     // 14^-144
1870     -581,                     // 14^-136
1871     -551,                     // 14^-128
1872     -520,                     // 14^-120
1873     -490,                     // 14^-112
1874     -459,                     // 14^-104
1875     -429,                     // 14^-96
1876     -399,                     // 14^-88
1877     -368,                     // 14^-80
1878     -338,                     // 14^-72
1879     -307,                     // 14^-64
1880     -277,                     // 14^-56
1881     -246,                     // 14^-48
1882     -216,                     // 14^-40
1883     -185,                     // 14^-32
1884     -155,                     // 14^-24
1885     -124,                     // 14^-16
1886     -94,                      // 14^-8
1887     -63,                      // 14^0
1888     -33,                      // 14^8
1889     -3,                       // 14^16
1890     28,                       // 14^24
1891     58,                       // 14^32
1892     89,                       // 14^40
1893     119,                      // 14^48
1894     150,                      // 14^56
1895     180,                      // 14^64
1896     211,                      // 14^72
1897     241,                      // 14^80
1898     272,                      // 14^88
1899     302,                      // 14^96
1900     332,                      // 14^104
1901     363,                      // 14^112
1902     393,                      // 14^120
1903     424,                      // 14^128
1904     454,                      // 14^136
1905     485,                      // 14^144
1906     515,                      // 14^152
1907     546,                      // 14^160
1908     576,                      // 14^168
1909     607,                      // 14^176
1910     637,                      // 14^184
1911     668,                      // 14^192
1912     698,                      // 14^200
1913     728,                      // 14^208
1914     759,                      // 14^216
1915     789,                      // 14^224
1916     820,                      // 14^232
1917     850,                      // 14^240
1918     881,                      // 14^248
1919     911,                      // 14^256
1920     942,                      // 14^264
1921 ];
1922 const BASE14_SMALL_INT_POWERS: [u64; 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: [u64; 8] = [
1929     9223372036854775808,      // 15^0
1930     17293822569102704640,     // 15^1
1931     16212958658533785600,     // 15^2
1932     15199648742375424000,     // 15^3
1933     14249670695976960000,     // 15^4
1934     13359066277478400000,     // 15^5
1935     12524124635136000000,     // 15^6
1936     11741366845440000000,     // 15^7
1937 ];
1938 const BASE15_SMALL_EXPONENT: [i32; 8] = [
1939     -63,                      // 15^0
1940     -60,                      // 15^1
1941     -56,                      // 15^2
1942     -52,                      // 15^3
1943     -48,                      // 15^4
1944     -44,                      // 15^5
1945     -40,                      // 15^6
1946     -36,                      // 15^7
1947 ];
1948 const BASE15_LARGE_MANTISSA: [u64; 70] = [
1949     13601350414362439244,     // 15^-296
1950     16232381325359158633,     // 15^-288
1951     9686178043528474499,      // 15^-280
1952     11559862131178364723,     // 15^-272
1953     13795989697002596758,     // 15^-264
1954     16464671426007778306,     // 15^-256
1955     9824790070164184132,      // 15^-248
1956     11725287122380398084,     // 15^-240
1957     13993414324420480958,     // 15^-232
1958     16700285665596816319,     // 15^-224
1959     9965385675239368708,      // 15^-216
1960     11893079393347852255,     // 15^-208
1961     14193664155710441018,     // 15^-200
1962     16939271613521887687,     // 15^-192
1963     10107993244338750184,     // 15^-184
1964     12063272820543086702,     // 15^-176
1965     14396779620362065880,     // 15^-168
1966     17181677519910502131,     // 15^-160
1967     10252641569253028545,     // 15^-152
1968     12235901765210495847,     // 15^-144
1969     14602801726422706134,     // 15^-136
1970     17427552325363535592,     // 15^-128
1971     10399359853791807565,     // 15^-120
1972     12411001080313881072,     // 15^-112
1973     14811772068776803956,     // 15^-104
1974     17676945670836105047,     // 15^-96
1975     10548177719679705225,     // 15^-88
1976     12588606117573098524,     // 15^-80
1977     15023732837543702665,     // 15^-72
1978     17929907907659841510,     // 15^-64
1979     10699125212536839185,     // 15^-56
1980     12768752734601403407,     // 15^-48
1981     15238726826595631383,     // 15^-40
1982     18186490107708584674,     // 15^-32
1983     10852232807944894743,     // 15^-24
1984     12951477302144931748,     // 15^-16
1985     15456797442197584532,     // 15^-8
1986     9223372036854775808,      // 15^0
1987     11007531417600000000,     // 15^8
1988     13136816711425781250,     // 15^16
1989     15677988711770840524,     // 15^24
1990     9355361174851030653,      // 15^32
1991     11165052395553650442,     // 15^40
1992     13324808381590173768,     // 15^48
1993     15902345292781888946,     // 15^56
1994     9489239115822963265,      // 15^64
1995     11324827544542942993,     // 15^72
1996     13515490267263203164,     // 15^80
1997     16129912481758560891,     // 15^88
1998     9625032889090827484,      // 15^96
1999     11486889122411397534,     // 15^104
2000     13708900866211693796,     // 15^112
2001     16360736223435182728,     // 15^120
2002     9762769910772315950,      // 15^128
2003     11651269848621662268,     // 15^136
2004     13905079227116716745,     // 15^144
2005     16594863120028599690,     // 15^152
2006     9902477989317744010,      // 15^160
2007     11818002910861417777,     // 15^168
2008     14104064957457333009,     // 15^176
2009     16832340440646942057,     // 15^184
2010     10044185331124443731,     // 15^192
2011     11987121971743813505,     // 15^200
2012     14305898231507155361,     // 15^208
2013     17073216130833033517,     // 15^216
2014     10187920546231501512,     // 15^224
2015     12158661175603789420,     // 15^232
2016     14510619798445343328,     // 15^240
2017     17317538822244368489,     // 15^248
2018     10333712654095989060,     // 15^256
2019 ];
2020 const BASE15_LARGE_EXPONENT: [i32; 70] = [
2021     -1220,                    // 15^-296
2022     -1189,                    // 15^-288
2023     -1157,                    // 15^-280
2024     -1126,                    // 15^-272
2025     -1095,                    // 15^-264
2026     -1064,                    // 15^-256
2027     -1032,                    // 15^-248
2028     -1001,                    // 15^-240
2029     -970,                     // 15^-232
2030     -939,                     // 15^-224
2031     -907,                     // 15^-216
2032     -876,                     // 15^-208
2033     -845,                     // 15^-200
2034     -814,                     // 15^-192
2035     -782,                     // 15^-184
2036     -751,                     // 15^-176
2037     -720,                     // 15^-168
2038     -689,                     // 15^-160
2039     -657,                     // 15^-152
2040     -626,                     // 15^-144
2041     -595,                     // 15^-136
2042     -564,                     // 15^-128
2043     -532,                     // 15^-120
2044     -501,                     // 15^-112
2045     -470,                     // 15^-104
2046     -439,                     // 15^-96
2047     -407,                     // 15^-88
2048     -376,                     // 15^-80
2049     -345,                     // 15^-72
2050     -314,                     // 15^-64
2051     -282,                     // 15^-56
2052     -251,                     // 15^-48
2053     -220,                     // 15^-40
2054     -189,                     // 15^-32
2055     -157,                     // 15^-24
2056     -126,                     // 15^-16
2057     -95,                      // 15^-8
2058     -63,                      // 15^0
2059     -32,                      // 15^8
2060     -1,                       // 15^16
2061     30,                       // 15^24
2062     62,                       // 15^32
2063     93,                       // 15^40
2064     124,                      // 15^48
2065     155,                      // 15^56
2066     187,                      // 15^64
2067     218,                      // 15^72
2068     249,                      // 15^80
2069     280,                      // 15^88
2070     312,                      // 15^96
2071     343,                      // 15^104
2072     374,                      // 15^112
2073     405,                      // 15^120
2074     437,                      // 15^128
2075     468,                      // 15^136
2076     499,                      // 15^144
2077     530,                      // 15^152
2078     562,                      // 15^160
2079     593,                      // 15^168
2080     624,                      // 15^176
2081     655,                      // 15^184
2082     687,                      // 15^192
2083     718,                      // 15^200
2084     749,                      // 15^208
2085     780,                      // 15^216
2086     812,                      // 15^224
2087     843,                      // 15^232
2088     874,                      // 15^240
2089     905,                      // 15^248
2090     937,                      // 15^256
2091 ];
2092 const BASE15_SMALL_INT_POWERS: [u64; 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: [u64; 8] = [
2099     9223372036854775808,      // 17^0
2100     9799832789158199296,      // 17^1
2101     10412322338480586752,     // 17^2
2102     11063092484635623424,     // 17^3
2103     11754535764925349888,     // 17^4
2104     12489194250233184256,     // 17^5
2105     13269768890872758272,     // 17^6
2106     14099129446552305664,     // 17^7
2107 ];
2108 const BASE17_SMALL_EXPONENT: [i32; 8] = [
2109     -63,                      // 17^0
2110     -59,                      // 17^1
2111     -55,                      // 17^2
2112     -51,                      // 17^3
2113     -47,                      // 17^4
2114     -43,                      // 17^5
2115     -39,                      // 17^6
2116     -35,                      // 17^7
2117 ];
2118 const BASE17_LARGE_MANTISSA: [u64; 67] = [
2119     13138227451101932889,     // 17^-280
2120     10669358063439695630,     // 17^-272
2121     17328852299072967575,     // 17^-264
2122     14072501842077846052,     // 17^-256
2123     11428068326595325663,     // 17^-248
2124     9280563409615280245,      // 17^-240
2125     15073213554289220394,     // 17^-232
2126     12240731344920942400,     // 17^-224
2127     9940514895438007254,      // 17^-216
2128     16145087021687770276,     // 17^-208
2129     13111183760586542995,     // 17^-200
2130     10647396286743453217,     // 17^-192
2131     17293182638130712658,     // 17^-184
2132     14043535043777936273,     // 17^-176
2133     11404544822822581011,     // 17^-168
2134     9261460323937079649,      // 17^-160
2135     15042186893809203473,     // 17^-152
2136     12215535057871861844,     // 17^-144
2137     9920053367473418578,      // 17^-136
2138     16111854019870470980,     // 17^-128
2139     13084195736727816960,     // 17^-120
2140     10625479716106730764,     // 17^-112
2141     17257586399518441101,     // 17^-104
2142     14014627870654357169,     // 17^-96
2143     11381069739763987898,     // 17^-88
2144     9242396559996829853,      // 17^-80
2145     15011224098520048145,     // 17^-72
2146     12190390634789334486,     // 17^-64
2147     9899633957460570790,      // 17^-56
2148     16078689424770850259,     // 17^-48
2149     13057263264941664926,     // 17^-40
2150     10603608258477502216,     // 17^-32
2151     17222063432103834911,     // 17^-24
2152     13985780199974813110,     // 17^-16
2153     11357642977750484199,     // 17^-8
2154     9223372036854775808,      // 17^0
2155     14980325036961824768,     // 17^8
2156     12165297968916717120,     // 17^16
2157     9879256578703990224,      // 17^24
2158     16045593095580712414,     // 17^32
2159     13030386230879856604,     // 17^40
2160     10581781820995279550,     // 17^48
2161     17186613585065666435,     // 17^56
2162     13956991909259640275,     // 17^64
2163     11334264437318166304,     // 17^72
2164     18408773347475537258,     // 17^80
2165     14949489577945200446,     // 17^88
2166     12140256953717114113,     // 17^96
2167     9858921144686656932,      // 17^104
2168     16012564891781700940,     // 17^112
2169     13003564520429535778,     // 17^120
2170     10560000310990718510,     // 17^128
2171     17151236707893158013,     // 17^136
2172     13928262876281286641,     // 17^144
2173     11310934019207866827,     // 17^152
2174     18370880780077845311,     // 17^160
2175     14918717590550882042,     // 17^168
2176     12115267482872925081,     // 17^176
2177     9838627569069637357,      // 17^184
2178     15979604673144701925,     // 17^192
2179     12976798019712735820,     // 17^200
2180     10538263635985225157,     // 17^208
2181     17115932650385342947,     // 17^216
2182     13899592979063793037,     // 17^224
2183     11287651624364733171,     // 17^232
2184     18333066210634546428,     // 17^240
2185     14888008944129060322,     // 17^248
2186 ];
2187 const BASE17_LARGE_EXPONENT: [i32; 67] = [
2188     -1208,                    // 17^-280
2189     -1175,                    // 17^-272
2190     -1143,                    // 17^-264
2191     -1110,                    // 17^-256
2192     -1077,                    // 17^-248
2193     -1044,                    // 17^-240
2194     -1012,                    // 17^-232
2195     -979,                     // 17^-224
2196     -946,                     // 17^-216
2197     -914,                     // 17^-208
2198     -881,                     // 17^-200
2199     -848,                     // 17^-192
2200     -816,                     // 17^-184
2201     -783,                     // 17^-176
2202     -750,                     // 17^-168
2203     -717,                     // 17^-160
2204     -685,                     // 17^-152
2205     -652,                     // 17^-144
2206     -619,                     // 17^-136
2207     -587,                     // 17^-128
2208     -554,                     // 17^-120
2209     -521,                     // 17^-112
2210     -489,                     // 17^-104
2211     -456,                     // 17^-96
2212     -423,                     // 17^-88
2213     -390,                     // 17^-80
2214     -358,                     // 17^-72
2215     -325,                     // 17^-64
2216     -292,                     // 17^-56
2217     -260,                     // 17^-48
2218     -227,                     // 17^-40
2219     -194,                     // 17^-32
2220     -162,                     // 17^-24
2221     -129,                     // 17^-16
2222     -96,                      // 17^-8
2223     -63,                      // 17^0
2224     -31,                      // 17^8
2225     2,                        // 17^16
2226     35,                       // 17^24
2227     67,                       // 17^32
2228     100,                      // 17^40
2229     133,                      // 17^48
2230     165,                      // 17^56
2231     198,                      // 17^64
2232     231,                      // 17^72
2233     263,                      // 17^80
2234     296,                      // 17^88
2235     329,                      // 17^96
2236     362,                      // 17^104
2237     394,                      // 17^112
2238     427,                      // 17^120
2239     460,                      // 17^128
2240     492,                      // 17^136
2241     525,                      // 17^144
2242     558,                      // 17^152
2243     590,                      // 17^160
2244     623,                      // 17^168
2245     656,                      // 17^176
2246     689,                      // 17^184
2247     721,                      // 17^192
2248     754,                      // 17^200
2249     787,                      // 17^208
2250     819,                      // 17^216
2251     852,                      // 17^224
2252     885,                      // 17^232
2253     917,                      // 17^240
2254     950,                      // 17^248
2255 ];
2256 const BASE17_SMALL_INT_POWERS: [u64; 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: [u64; 7] = [
2263     9223372036854775808,      // 18^0
2264     10376293541461622784,     // 18^1
2265     11673330234144325632,     // 18^2
2266     13132496513412366336,     // 18^3
2267     14774058577588912128,     // 18^4
2268     16620815899787526144,     // 18^5
2269     9349208943630483456,      // 18^6
2270 ];
2271 const BASE18_SMALL_EXPONENT: [i32; 7] = [
2272     -63,                      // 18^0
2273     -59,                      // 18^1
2274     -55,                      // 18^2
2275     -51,                      // 18^3
2276     -47,                      // 18^4
2277     -43,                      // 18^5
2278     -38,                      // 18^6
2279 ];
2280 const BASE18_LARGE_MANTISSA: [u64; 75] = [
2281     14081888293732326968,     // 18^-273
2282     16058262627216485544,     // 18^-266
2283     18312018475493194258,     // 18^-259
2284     10441042983020688038,     // 18^-252
2285     11906429509033078491,     // 18^-245
2286     13577481089208229636,     // 18^-238
2287     15483062540952967857,     // 18^-231
2288     17656089820489710741,     // 18^-224
2289     10067049297406417285,     // 18^-217
2290     11479946305982273645,     // 18^-210
2291     13091141534609253262,     // 18^-203
2292     14928465875303384176,     // 18^-196
2293     17023656248839843776,     // 18^-189
2294     9706451905352742522,      // 18^-182
2295     11068739548514628780,     // 18^-175
2296     12622222454457155586,     // 18^-168
2297     14393734624570008992,     // 18^-161
2298     16413876176725623927,     // 18^-154
2299     9358770957364699929,      // 18^-147
2300     10672262040895386089,     // 18^-140
2301     12170099854822007158,     // 18^-133
2302     13878157218102970303,     // 18^-126
2303     15825938165500818674,     // 18^-119
2304     18047087583901234911,     // 18^-112
2305     10289986187706530766,     // 18^-105
2306     11734172092969064177,     // 18^-98
2307     13381047573408163051,     // 18^-91
2308     15259059841903798156,     // 18^-84
2309     17400648639910404101,     // 18^-77
2310     9921403291771844100,      // 18^-70
2311     11313859076748534537,     // 18^-63
2312     12901744183172431346,     // 18^-56
2313     14712486856947913357,     // 18^-49
2314     16777364861891103792,     // 18^-42
2315     9566022877229980327,      // 18^-35
2316     10908601492662859386,     // 18^-28
2317     12439609234991117453,     // 18^-21
2318     14185491882103974832,     // 18^-14
2319     16176406841720334625,     // 18^-7
2320     9223372036854775808,      // 18^0
2321     10517860061584293888,     // 18^7
2322     11994027762626592768,     // 18^14
2323     13677373641439044901,     // 18^21
2324     15596974880318657672,     // 18^28
2325     17785989605508530085,     // 18^35
2326     10141114821132365302,     // 18^42
2327     11564406827668344530,     // 18^49
2328     13187455978423603575,     // 18^56
2329     15038297923484984581,     // 18^63
2330     17148903079221976570,     // 18^70
2331     9777864433756263024,      // 18^77
2332     11150174730505647564,     // 18^84
2333     12715086956165281921,     // 18^91
2334     14499632535849309517,     // 18^98
2335     16534636719312342666,     // 18^105
2336     9427625519601420913,      // 18^112
2337     10750780249562856814,     // 18^119
2338     12259637989871837542,     // 18^126
2339     13980261911578014597,     // 18^133
2340     15942373117198559022,     // 18^140
2341     18179864026545065558,     // 18^147
2342     10365691907784965713,     // 18^154
2343     11820503010388934534,     // 18^161
2344     13479494920515287357,     // 18^168
2345     15371324143524666656,     // 18^175
2346     17528669087274082029,     // 18^182
2347     9994397265397337538,      // 18^189
2348     11397097657699641734,     // 18^196
2349     12996665188491343910,     // 18^203
2350     14820729899390519784,     // 18^210
2351     16900799671687597041,     // 18^217
2352     9636402237998480121,      // 18^224
2353     10988858503312433354,     // 18^231
2354     12531130210573617469,     // 18^238
2355     14289857705148955482,     // 18^245
2356 ];
2357 const BASE18_LARGE_EXPONENT: [i32; 75] = [
2358     -1202,                    // 18^-273
2359     -1173,                    // 18^-266
2360     -1144,                    // 18^-259
2361     -1114,                    // 18^-252
2362     -1085,                    // 18^-245
2363     -1056,                    // 18^-238
2364     -1027,                    // 18^-231
2365     -998,                     // 18^-224
2366     -968,                     // 18^-217
2367     -939,                     // 18^-210
2368     -910,                     // 18^-203
2369     -881,                     // 18^-196
2370     -852,                     // 18^-189
2371     -822,                     // 18^-182
2372     -793,                     // 18^-175
2373     -764,                     // 18^-168
2374     -735,                     // 18^-161
2375     -706,                     // 18^-154
2376     -676,                     // 18^-147
2377     -647,                     // 18^-140
2378     -618,                     // 18^-133
2379     -589,                     // 18^-126
2380     -560,                     // 18^-119
2381     -531,                     // 18^-112
2382     -501,                     // 18^-105
2383     -472,                     // 18^-98
2384     -443,                     // 18^-91
2385     -414,                     // 18^-84
2386     -385,                     // 18^-77
2387     -355,                     // 18^-70
2388     -326,                     // 18^-63
2389     -297,                     // 18^-56
2390     -268,                     // 18^-49
2391     -239,                     // 18^-42
2392     -209,                     // 18^-35
2393     -180,                     // 18^-28
2394     -151,                     // 18^-21
2395     -122,                     // 18^-14
2396     -93,                      // 18^-7
2397     -63,                      // 18^0
2398     -34,                      // 18^7
2399     -5,                       // 18^14
2400     24,                       // 18^21
2401     53,                       // 18^28
2402     82,                       // 18^35
2403     112,                      // 18^42
2404     141,                      // 18^49
2405     170,                      // 18^56
2406     199,                      // 18^63
2407     228,                      // 18^70
2408     258,                      // 18^77
2409     287,                      // 18^84
2410     316,                      // 18^91
2411     345,                      // 18^98
2412     374,                      // 18^105
2413     404,                      // 18^112
2414     433,                      // 18^119
2415     462,                      // 18^126
2416     491,                      // 18^133
2417     520,                      // 18^140
2418     549,                      // 18^147
2419     579,                      // 18^154
2420     608,                      // 18^161
2421     637,                      // 18^168
2422     666,                      // 18^175
2423     695,                      // 18^182
2424     725,                      // 18^189
2425     754,                      // 18^196
2426     783,                      // 18^203
2427     812,                      // 18^210
2428     841,                      // 18^217
2429     871,                      // 18^224
2430     900,                      // 18^231
2431     929,                      // 18^238
2432     958,                      // 18^245
2433 ];
2434 const BASE18_SMALL_INT_POWERS: [u64; 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: [u64; 7] = [
2441     9223372036854775808,      // 19^0
2442     10952754293765046272,     // 19^1
2443     13006395723845992448,     // 19^2
2444     15445094922067116032,     // 19^3
2445     18341050219954700288,     // 19^4
2446     10889998568098103296,     // 19^5
2447     12931873299616497664,     // 19^6
2448 ];
2449 const BASE19_SMALL_EXPONENT: [i32; 7] = [
2450     -63,                      // 19^0
2451     -59,                      // 19^1
2452     -55,                      // 19^2
2453     -51,                      // 19^3
2454     -47,                      // 19^4
2455     -42,                      // 19^5
2456     -38,                      // 19^6
2457 ];
2458 const BASE19_LARGE_MANTISSA: [u64; 74] = [
2459     11480257701232751935,     // 19^-273
2460     9557118560717499270,      // 19^-266
2461     15912276110980153383,     // 19^-259
2462     13246698229359450470,     // 19^-252
2463     11027650146079950824,     // 19^-245
2464     18360660994723606251,     // 19^-238
2465     15284936849533635885,     // 19^-231
2466     12724449003299523561,     // 19^-224
2467     10592886580523254223,     // 19^-217
2468     17636794501472422448,     // 19^-210
2469     14682330350779734844,     // 19^-203
2470     12222789379976654044,     // 19^-196
2471     10175263507767080823,     // 19^-189
2472     16941466343535111364,     // 19^-182
2473     14103481529006456400,     // 19^-175
2474     11740907617180962231,     // 19^-168
2475     9774105166278679843,      // 19^-161
2476     16273551401031031665,     // 19^-154
2477     13547453741119703900,     // 19^-147
2478     11278023975525727060,     // 19^-140
2479     9388762436329270793,      // 19^-133
2480     15631968911773566269,     // 19^-126
2481     13013347271048440836,     // 19^-119
2482     10833389456740556437,     // 19^-112
2483     18037223579289291900,     // 19^-105
2484     15015680722474235794,     // 19^-98
2485     12500297873901968386,     // 19^-91
2486     10406284591707172986,     // 19^-84
2487     17326108560931302042,     // 19^-77
2488     14423689608892845377,     // 19^-70
2489     12007475377523598784,     // 19^-63
2490     9996018276276719532,      // 19^-56
2491     16643029152771930644,     // 19^-49
2492     13855037662215477149,     // 19^-42
2493     11534082339177879647,     // 19^-35
2494     9601926652984804576,      // 19^-28
2495     15986880054797934009,     // 19^-21
2496     13308804739049304804,     // 19^-14
2497     11079352755197736707,     // 19^-7
2498     9223372036854775808,      // 19^0
2499     15356599543294590976,     // 19^7
2500     12784106972526145936,     // 19^14
2501     10642550821503597582,     // 19^21
2502     17719483767102098773,     // 19^28
2503     14751167752856224795,     // 19^35
2504     12280095342105548712,     // 19^42
2505     10222969742988875833,     // 19^49
2506     17020895596425699999,     // 19^56
2507     14169605026128220038,     // 19^63
2508     11795954299763191941,     // 19^70
2509     9819930589845265884,      // 19^77
2510     16349849166729084322,     // 19^84
2511     13610970328610229813,     // 19^91
2512     11330900450341615431,     // 19^98
2513     9432781198977253334,      // 19^105
2514     15705258648723927251,     // 19^112
2515     13074359725955544955,     // 19^119
2516     10884181283927938347,     // 19^126
2517     18121790237456409263,     // 19^133
2518     15086081021789818522,     // 19^140
2519     12558904921302722743,     // 19^147
2520     10455073958207408827,     // 19^154
2521     17407341190420966318,     // 19^161
2522     14491314386248513408,     // 19^168
2523     12063771850272711708,     // 19^175
2524     10042884128822494706,     // 19^182
2525     16721059197198717605,     // 19^189
2526     13919996342176535757,     // 19^196
2527     11588159331358018389,     // 19^203
2528     9646944825844903597,      // 19^210
2529     16061833775630288054,     // 19^217
2530     13371202432132867541,     // 19^224
2531     11131297769520092558,     // 19^231
2532     9266615374542536521,      // 19^238
2533 ];
2534 const BASE19_LARGE_EXPONENT: [i32; 74] = [
2535     -1223,                    // 19^-273
2536     -1193,                    // 19^-266
2537     -1164,                    // 19^-259
2538     -1134,                    // 19^-252
2539     -1104,                    // 19^-245
2540     -1075,                    // 19^-238
2541     -1045,                    // 19^-231
2542     -1015,                    // 19^-224
2543     -985,                     // 19^-217
2544     -956,                     // 19^-210
2545     -926,                     // 19^-203
2546     -896,                     // 19^-196
2547     -866,                     // 19^-189
2548     -837,                     // 19^-182
2549     -807,                     // 19^-175
2550     -777,                     // 19^-168
2551     -747,                     // 19^-161
2552     -718,                     // 19^-154
2553     -688,                     // 19^-147
2554     -658,                     // 19^-140
2555     -628,                     // 19^-133
2556     -599,                     // 19^-126
2557     -569,                     // 19^-119
2558     -539,                     // 19^-112
2559     -510,                     // 19^-105
2560     -480,                     // 19^-98
2561     -450,                     // 19^-91
2562     -420,                     // 19^-84
2563     -391,                     // 19^-77
2564     -361,                     // 19^-70
2565     -331,                     // 19^-63
2566     -301,                     // 19^-56
2567     -272,                     // 19^-49
2568     -242,                     // 19^-42
2569     -212,                     // 19^-35
2570     -182,                     // 19^-28
2571     -153,                     // 19^-21
2572     -123,                     // 19^-14
2573     -93,                      // 19^-7
2574     -63,                      // 19^0
2575     -34,                      // 19^7
2576     -4,                       // 19^14
2577     26,                       // 19^21
2578     55,                       // 19^28
2579     85,                       // 19^35
2580     115,                      // 19^42
2581     145,                      // 19^49
2582     174,                      // 19^56
2583     204,                      // 19^63
2584     234,                      // 19^70
2585     264,                      // 19^77
2586     293,                      // 19^84
2587     323,                      // 19^91
2588     353,                      // 19^98
2589     383,                      // 19^105
2590     412,                      // 19^112
2591     442,                      // 19^119
2592     472,                      // 19^126
2593     501,                      // 19^133
2594     531,                      // 19^140
2595     561,                      // 19^147
2596     591,                      // 19^154
2597     620,                      // 19^161
2598     650,                      // 19^168
2599     680,                      // 19^175
2600     710,                      // 19^182
2601     739,                      // 19^189
2602     769,                      // 19^196
2603     799,                      // 19^203
2604     829,                      // 19^210
2605     858,                      // 19^217
2606     888,                      // 19^224
2607     918,                      // 19^231
2608     948,                      // 19^238
2609 ];
2610 const BASE19_SMALL_INT_POWERS: [u64; 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: [u64; 7] = [
2617     9223372036854775808,      // 20^0
2618     11529215046068469760,     // 20^1
2619     14411518807585587200,     // 20^2
2620     18014398509481984000,     // 20^3
2621     11258999068426240000,     // 20^4
2622     14073748835532800000,     // 20^5
2623     17592186044416000000,     // 20^6
2624 ];
2625 const BASE20_SMALL_EXPONENT: [i32; 7] = [
2626     -63,                      // 20^0
2627     -59,                      // 20^1
2628     -55,                      // 20^2
2629     -51,                      // 20^3
2630     -46,                      // 20^4
2631     -42,                      // 20^5
2632     -38,                      // 20^6
2633 ];
2634 const BASE20_LARGE_MANTISSA: [u64; 72] = [
2635     11896135267822264502,     // 20^-266
2636     14181298336770849826,     // 20^-259
2637     16905424996341287883,     // 20^-252
2638     10076418516839318205,     // 20^-245
2639     12012026926087520367,     // 20^-238
2640     14319451959237480602,     // 20^-231
2641     17070116948172426941,     // 20^-224
2642     10174582569701926077,     // 20^-217
2643     12129047596099288555,     // 20^-210
2644     14458951468586073584,     // 20^-203
2645     17236413322193710308,     // 20^-196
2646     10273702932711667006,     // 20^-189
2647     12247208276643356092,     // 20^-182
2648     14599809976391024699,     // 20^-175
2649     17404329748619824289,     // 20^-168
2650     10373788922202482396,     // 20^-161
2651     12366520073655226703,     // 20^-154
2652     14742040721959145907,     // 20^-147
2653     17573882009934360870,     // 20^-140
2654     10474849945267653984,     // 20^-133
2655     12486994201263968925,     // 20^-126
2656     14885657073574029118,     // 20^-119
2657     17745086042373215101,     // 20^-112
2658     10576895500643977583,     // 20^-105
2659     12608641982846233347,     // 20^-98
2660     15030672529752532658,     // 20^-91
2661     17917957937422433684,     // 20^-84
2662     10679935179604550411,     // 20^-77
2663     12731474852090538039,     // 20^-70
2664     15177100720513508366,     // 20^-63
2665     18092513943330655534,     // 20^-56
2666     10783978666860255917,     // 20^-49
2667     12855504354071922204,     // 20^-42
2668     15324955408658888583,     // 20^-35
2669     18268770466636286477,     // 20^-28
2670     10889035741470030830,     // 20^-21
2671     12980742146337069071,     // 20^-14
2672     15474250491067253436,     // 20^-7
2673     9223372036854775808,      // 20^0
2674     10995116277760000000,     // 20^7
2675     13107200000000000000,     // 20^14
2676     15625000000000000000,     // 20^21
2677     9313225746154785156,      // 20^28
2678     11102230246251565404,     // 20^35
2679     13234889800848442797,     // 20^42
2680     15777218104420236108,     // 20^49
2681     9403954806578300063,      // 20^56
2682     11210387714598536567,     // 20^63
2683     13363823550460978230,     // 20^70
2684     15930919111324522770,     // 20^77
2685     9495567745759798747,      // 20^84
2686     11319598848533390459,     // 20^91
2687     13494013367335069727,     // 20^98
2688     16086117467087590369,     // 20^105
2689     9588073174409622174,      // 20^112
2690     11429873912822749822,     // 20^119
2691     13625471488026082303,     // 20^126
2692     16242827758820155028,     // 20^133
2693     9681479787123295682,      // 20^140
2694     11541223272232169725,     // 20^147
2695     13758210268297397763,     // 20^154
2696     16401064715739962772,     // 20^161
2697     9775796363198734982,      // 20^168
2698     11653657392500323036,     // 20^175
2699     13892242184281734271,     // 20^182
2700     16560843210556190337,     // 20^189
2701     9871031767461413346,      // 20^196
2702     11767186841322676356,     // 20^203
2703     14027579833653779454,     // 20^210
2704     16722178260867332761,     // 20^217
2705     9967194951097567535,      // 20^224
2706     11881822289344748896,     // 20^231
2707 ];
2708 const BASE20_LARGE_EXPONENT: [i32; 72] = [
2709     -1213,                    // 20^-266
2710     -1183,                    // 20^-259
2711     -1153,                    // 20^-252
2712     -1122,                    // 20^-245
2713     -1092,                    // 20^-238
2714     -1062,                    // 20^-231
2715     -1032,                    // 20^-224
2716     -1001,                    // 20^-217
2717     -971,                     // 20^-210
2718     -941,                     // 20^-203
2719     -911,                     // 20^-196
2720     -880,                     // 20^-189
2721     -850,                     // 20^-182
2722     -820,                     // 20^-175
2723     -790,                     // 20^-168
2724     -759,                     // 20^-161
2725     -729,                     // 20^-154
2726     -699,                     // 20^-147
2727     -669,                     // 20^-140
2728     -638,                     // 20^-133
2729     -608,                     // 20^-126
2730     -578,                     // 20^-119
2731     -548,                     // 20^-112
2732     -517,                     // 20^-105
2733     -487,                     // 20^-98
2734     -457,                     // 20^-91
2735     -427,                     // 20^-84
2736     -396,                     // 20^-77
2737     -366,                     // 20^-70
2738     -336,                     // 20^-63
2739     -306,                     // 20^-56
2740     -275,                     // 20^-49
2741     -245,                     // 20^-42
2742     -215,                     // 20^-35
2743     -185,                     // 20^-28
2744     -154,                     // 20^-21
2745     -124,                     // 20^-14
2746     -94,                      // 20^-7
2747     -63,                      // 20^0
2748     -33,                      // 20^7
2749     -3,                       // 20^14
2750     27,                       // 20^21
2751     58,                       // 20^28
2752     88,                       // 20^35
2753     118,                      // 20^42
2754     148,                      // 20^49
2755     179,                      // 20^56
2756     209,                      // 20^63
2757     239,                      // 20^70
2758     269,                      // 20^77
2759     300,                      // 20^84
2760     330,                      // 20^91
2761     360,                      // 20^98
2762     390,                      // 20^105
2763     421,                      // 20^112
2764     451,                      // 20^119
2765     481,                      // 20^126
2766     511,                      // 20^133
2767     542,                      // 20^140
2768     572,                      // 20^147
2769     602,                      // 20^154
2770     632,                      // 20^161
2771     663,                      // 20^168
2772     693,                      // 20^175
2773     723,                      // 20^182
2774     753,                      // 20^189
2775     784,                      // 20^196
2776     814,                      // 20^203
2777     844,                      // 20^210
2778     874,                      // 20^217
2779     905,                      // 20^224
2780     935,                      // 20^231
2781 ];
2782 const BASE20_SMALL_INT_POWERS: [u64; 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: [u64; 7] = [
2789     9223372036854775808,      // 21^0
2790     12105675798371893248,     // 21^1
2791     15888699485363109888,     // 21^2
2792     10426959037269540864,     // 21^3
2793     13685383736416272384,     // 21^4
2794     17962066154046357504,     // 21^5
2795     11787605913592922112,     // 21^6
2796 ];
2797 const BASE21_SMALL_EXPONENT: [i32; 7] = [
2798     -63,                      // 21^0
2799     -59,                      // 21^1
2800     -55,                      // 21^2
2801     -50,                      // 21^3
2802     -46,                      // 21^4
2803     -42,                      // 21^5
2804     -37,                      // 21^6
2805 ];
2806 const BASE21_LARGE_MANTISSA: [u64; 72] = [
2807     14408615719666154271,     // 21^-266
2808     12084465783258517647,     // 21^-259
2809     10135207719324857823,     // 21^-252
2810     17000740844691866712,     // 21^-245
2811     14258473889848767691,     // 21^-238
2812     11958542249702993646,     // 21^-231
2813     10029596003240171126,     // 21^-224
2814     16823588341749525709,     // 21^-217
2815     14109896580142091329,     // 21^-210
2816     11833930874797054029,     // 21^-203
2817     9925084790952075138,      // 21^-196
2818     16648281817731599335,     // 21^-189
2819     13962867487806377083,     // 21^-182
2820     11710617985478380225,     // 21^-175
2821     9821662614901370847,      // 21^-168
2822     16474802037018309233,     // 21^-161
2823     13817370479981011975,     // 21^-154
2824     11588590051161810088,     // 21^-147
2825     9719318127024052612,      // 21^-140
2826     16303129964430447286,     // 21^-133
2827     13673389591914329770,     // 21^-126
2828     11467833682254685835,     // 21^-119
2829     9618040097506134632,      // 21^-112
2830     16133246763140728476,     // 21^-105
2831     13530909025211868449,     // 21^-98
2832     11348335628687672485,     // 21^-91
2833     9517817413551452467,      // 21^-84
2834     15965133792606908039,     // 21^-77
2835     13389913146102881332,     // 21^-70
2836     11230082778460885572,     // 21^-63
2837     9418639078162304415,      // 21^-56
2838     15798772606526436117,     // 21^-49
2839     13250386483724911652,     // 21^-42
2840     11113062156205168633,     // 21^-35
2841     9320494208932798947,      // 21^-28
2842     15634144950812425486,     // 21^-21
2843     13112313728426242332,     // 21^-14
2844     10997260921758362571,     // 21^-7
2845     9223372036854775808,      // 21^0
2846     15471232761590710272,     // 21^7
2847     12975679730086034724,     // 21^14
2848     10882666368756410705,     // 21^21
2849     18254523810272339491,     // 21^28
2850     15310018163217775871,     // 21^35
2851     12840469496451971963,     // 21^42
2852     10769265923239144897,     // 21^49
2853     18064306536063374465,     // 21^56
2854     15150483466319342608,     // 21^63
2855     12706668191495224563,     // 21^70
2856     10657047142270599779,     // 21^77
2857     17876071379371335714,     // 21^84
2858     14992611165849387896,     // 21^91
2859     12574261133782557711,     // 21^98
2860     10545997712573703694,     // 21^105
2861     17689797685974006860,     // 21^112
2862     14836383939169393936,     // 21^119
2863     12443233794865401683,     // 21^126
2864     10436105449179196548,     // 21^133
2865     17505465016871978304,     // 21^140
2866     14681784644147610193,     // 21^147
2867     12313571797685708585,     // 21^154
2868     10327358294088626305,     // 21^161
2869     17323053146045965028,     // 21^168
2870     14528796317278122096,     // 21^175
2871     12185260914998420522,     // 21^182
2872     10219744314951277448,     // 21^189
2873     17142542058237493769,     // 21^196
2874     14377402171819519570,     // 21^203
2875     12058287067810376090,     // 21^210
2876     10113251703754886210,     // 21^217
2877     16963911946752716066,     // 21^224
2878     14227585595952961160,     // 21^231
2879 ];
2880 const BASE21_LARGE_EXPONENT: [i32; 72] = [
2881     -1232,                    // 21^-266
2882     -1201,                    // 21^-259
2883     -1170,                    // 21^-252
2884     -1140,                    // 21^-245
2885     -1109,                    // 21^-238
2886     -1078,                    // 21^-231
2887     -1047,                    // 21^-224
2888     -1017,                    // 21^-217
2889     -986,                     // 21^-210
2890     -955,                     // 21^-203
2891     -924,                     // 21^-196
2892     -894,                     // 21^-189
2893     -863,                     // 21^-182
2894     -832,                     // 21^-175
2895     -801,                     // 21^-168
2896     -771,                     // 21^-161
2897     -740,                     // 21^-154
2898     -709,                     // 21^-147
2899     -678,                     // 21^-140
2900     -648,                     // 21^-133
2901     -617,                     // 21^-126
2902     -586,                     // 21^-119
2903     -555,                     // 21^-112
2904     -525,                     // 21^-105
2905     -494,                     // 21^-98
2906     -463,                     // 21^-91
2907     -432,                     // 21^-84
2908     -402,                     // 21^-77
2909     -371,                     // 21^-70
2910     -340,                     // 21^-63
2911     -309,                     // 21^-56
2912     -279,                     // 21^-49
2913     -248,                     // 21^-42
2914     -217,                     // 21^-35
2915     -186,                     // 21^-28
2916     -156,                     // 21^-21
2917     -125,                     // 21^-14
2918     -94,                      // 21^-7
2919     -63,                      // 21^0
2920     -33,                      // 21^7
2921     -2,                       // 21^14
2922     29,                       // 21^21
2923     59,                       // 21^28
2924     90,                       // 21^35
2925     121,                      // 21^42
2926     152,                      // 21^49
2927     182,                      // 21^56
2928     213,                      // 21^63
2929     244,                      // 21^70
2930     275,                      // 21^77
2931     305,                      // 21^84
2932     336,                      // 21^91
2933     367,                      // 21^98
2934     398,                      // 21^105
2935     428,                      // 21^112
2936     459,                      // 21^119
2937     490,                      // 21^126
2938     521,                      // 21^133
2939     551,                      // 21^140
2940     582,                      // 21^147
2941     613,                      // 21^154
2942     644,                      // 21^161
2943     674,                      // 21^168
2944     705,                      // 21^175
2945     736,                      // 21^182
2946     767,                      // 21^189
2947     797,                      // 21^196
2948     828,                      // 21^203
2949     859,                      // 21^210
2950     890,                      // 21^217
2951     920,                      // 21^224
2952     951,                      // 21^231
2953 ];
2954 const BASE21_SMALL_INT_POWERS: [u64; 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: [u64; 7] = [
2961     9223372036854775808,      // 22^0
2962     12682136550675316736,     // 22^1
2963     17437937757178560512,     // 22^2
2964     11988582208060260352,     // 22^3
2965     16484300536082857984,     // 22^4
2966     11332956618556964864,     // 22^5
2967     15582815350515826688,     // 22^6
2968 ];
2969 const BASE22_SMALL_EXPONENT: [i32; 7] = [
2970     -63,                      // 22^0
2971     -59,                      // 22^1
2972     -55,                      // 22^2
2973     -50,                      // 22^3
2974     -46,                      // 22^4
2975     -41,                      // 22^5
2976     -37,                      // 22^6
2977 ];
2978 const BASE22_LARGE_MANTISSA: [u64; 70] = [
2979     9269587019009961312,      // 22^-259
2980     10766865452458105492,     // 22^-252
2981     12505993140104023937,     // 22^-245
2982     14526035001637582317,     // 22^-238
2983     16872365953260472216,     // 22^-231
2984     9798845067792082715,      // 22^-224
2985     11381612386618310709,     // 22^-217
2986     13220037629231758864,     // 22^-210
2987     15355416173176400877,     // 22^-203
2988     17835713669231780592,     // 22^-196
2989     10358321731667433590,     // 22^-189
2990     12031459025026523680,     // 22^-182
2991     13974851334106036811,     // 22^-175
2992     16232151844936756579,     // 22^-168
2993     9427032431967498649,      // 22^-161
2994     10949742378252536811,     // 22^-154
2995     12718409426865212084,     // 22^-147
2996     14772762021382712235,     // 22^-140
2997     17158945778190527545,     // 22^-133
2998     9965280013064351107,      // 22^-126
2999     11574930887071326019,     // 22^-119
3000     13444582075449265201,     // 22^-112
3001     15616230364311619568,     // 22^-105
3002     18138656108661462534,     // 22^-98
3003     10534259477248206780,     // 22^-91
3004     12235815274209166465,     // 22^-84
3005     14212216411407346527,     // 22^-77
3006     16507857531195957209,     // 22^-70
3007     9587152080358667750,      // 22^-63
3008     11135725497779554116,     // 22^-56
3009     12934433638113158426,     // 22^-49
3010     15023679738882972932,     // 22^-42
3011     17450393207123747022,     // 22^-35
3012     10134541882409419905,     // 22^-28
3013     11771532933066741091,     // 22^-21
3014     13672940444874950532,     // 22^-14
3015     15881474526053323426,     // 22^-7
3016     9223372036854775808,      // 22^0
3017     10713185553479630848,     // 22^7
3018     12443642546855641088,     // 22^14
3019     14453613172379218947,     // 22^21
3020     16788246122479815273,     // 22^28
3021     9749991386498543747,      // 22^35
3022     11324867570234788254,     // 22^42
3023     13154127055020322136,     // 22^49
3024     15278859333807672616,     // 22^56
3025     17746790917089950882,     // 22^63
3026     10306678691583236909,     // 22^70
3027     11971474296148943805,     // 22^77
3028     13905177517602390611,     // 22^84
3029     16151223902158337584,     // 22^91
3030     9380032480974399852,      // 22^98
3031     10895150717634104284,     // 22^105
3032     12654999798852712250,     // 22^112
3033     14699110095811391320,     // 22^119
3034     17073397158676562691,     // 22^126
3035     9915596544207462992,      // 22^133
3036     11517222250937216925,     // 22^140
3037     13377551999629643946,     // 22^147
3038     15538373194824147716,     // 22^154
3039     18048222989401488392,     // 22^161
3040     10481739271897017716,     // 22^168
3041     12174811695150892652,     // 22^175
3042     14141359174025375600,     // 22^182
3043     16425555014410689631,     // 22^189
3044     9539353827706830891,      // 22^196
3045     11080206589104387250,     // 22^203
3046     12869946987462278079,     // 22^210
3047     14948776823616759120,     // 22^217
3048     17363391530672110525,     // 22^224
3049 ];
3050 const BASE22_LARGE_EXPONENT: [i32; 70] = [
3051     -1218,                    // 22^-259
3052     -1187,                    // 22^-252
3053     -1156,                    // 22^-245
3054     -1125,                    // 22^-238
3055     -1094,                    // 22^-231
3056     -1062,                    // 22^-224
3057     -1031,                    // 22^-217
3058     -1000,                    // 22^-210
3059     -969,                     // 22^-203
3060     -938,                     // 22^-196
3061     -906,                     // 22^-189
3062     -875,                     // 22^-182
3063     -844,                     // 22^-175
3064     -813,                     // 22^-168
3065     -781,                     // 22^-161
3066     -750,                     // 22^-154
3067     -719,                     // 22^-147
3068     -688,                     // 22^-140
3069     -657,                     // 22^-133
3070     -625,                     // 22^-126
3071     -594,                     // 22^-119
3072     -563,                     // 22^-112
3073     -532,                     // 22^-105
3074     -501,                     // 22^-98
3075     -469,                     // 22^-91
3076     -438,                     // 22^-84
3077     -407,                     // 22^-77
3078     -376,                     // 22^-70
3079     -344,                     // 22^-63
3080     -313,                     // 22^-56
3081     -282,                     // 22^-49
3082     -251,                     // 22^-42
3083     -220,                     // 22^-35
3084     -188,                     // 22^-28
3085     -157,                     // 22^-21
3086     -126,                     // 22^-14
3087     -95,                      // 22^-7
3088     -63,                      // 22^0
3089     -32,                      // 22^7
3090     -1,                       // 22^14
3091     30,                       // 22^21
3092     61,                       // 22^28
3093     93,                       // 22^35
3094     124,                      // 22^42
3095     155,                      // 22^49
3096     186,                      // 22^56
3097     217,                      // 22^63
3098     249,                      // 22^70
3099     280,                      // 22^77
3100     311,                      // 22^84
3101     342,                      // 22^91
3102     374,                      // 22^98
3103     405,                      // 22^105
3104     436,                      // 22^112
3105     467,                      // 22^119
3106     498,                      // 22^126
3107     530,                      // 22^133
3108     561,                      // 22^140
3109     592,                      // 22^147
3110     623,                      // 22^154
3111     654,                      // 22^161
3112     686,                      // 22^168
3113     717,                      // 22^175
3114     748,                      // 22^182
3115     779,                      // 22^189
3116     811,                      // 22^196
3117     842,                      // 22^203
3118     873,                      // 22^210
3119     904,                      // 22^217
3120     935,                      // 22^224
3121 ];
3122 const BASE22_SMALL_INT_POWERS: [u64; 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: [u64; 7] = [
3129     9223372036854775808,      // 23^0
3130     13258597302978740224,     // 23^1
3131     9529616811515969536,      // 23^2
3132     13698824166554206208,     // 23^3
3133     9846029869710835712,      // 23^4
3134     14153667937709326336,     // 23^5
3135     10172948830228578304,     // 23^6
3136 ];
3137 const BASE23_SMALL_EXPONENT: [i32; 7] = [
3138     -63,                      // 23^0
3139     -59,                      // 23^1
3140     -54,                      // 23^2
3141     -50,                      // 23^3
3142     -45,                      // 23^4
3143     -41,                      // 23^5
3144     -36,                      // 23^6
3145 ];
3146 const BASE23_LARGE_MANTISSA: [u64; 69] = [
3147     9630971713765025029,      // 23^-252
3148     15269861356524917016,     // 23^-245
3149     12105147475110827234,     // 23^-238
3150     9596327823341159083,      // 23^-231
3151     15214933627595239789,     // 23^-224
3152     12061603644316153100,     // 23^-217
3153     9561808551614073801,      // 23^-210
3154     15160203481036150549,     // 23^-203
3155     12018216446491393101,     // 23^-196
3156     9527413450313687580,      // 23^-189
3157     15105670206117496642,     // 23^-182
3158     11974985318206853149,     // 23^-175
3159     9493142072782406120,      // 23^-168
3160     15051333094665716613,     // 23^-161
3161     11931909698059570948,     // 23^-154
3162     9458993973969322090,      // 23^-147
3163     14997191441054643808,     // 23^-140
3164     11888989026666025574,     // 23^-133
3165     9424968710424435661,      // 23^-126
3166     14943244542196343052,     // 23^-119
3167     11846222746654873270,     // 23^-112
3168     9391065840292895827,      // 23^-105
3169     14889491697531980297,     // 23^-98
3170     11803610302659709381,     // 23^-91
3171     9357284923309262442,      // 23^-84
3172     14835932209022725101,     // 23^-77
3173     11761151141311856318,     // 23^-70
3174     9323625520791788901,      // 23^-63
3175     14782565381140685845,     // 23^-56
3176     11718844711233177467,     // 23^-49
3177     9290087195636725377,      // 23^-42
3178     14729390520859877547,     // 23^-35
3179     11676690463028916948,     // 23^-28
3180     9256669512312642559,      // 23^-21
3181     14676406937647222172,     // 23^-14
3182     11634687849280565129,     // 23^-7
3183     9223372036854775808,      // 23^0
3184     14623613943453581312,     // 23^7
3185     11592836324538749809,     // 23^14
3186     18380388673718779295,     // 23^21
3187     14571010852704821123,     // 23^28
3188     11551135345316152959,     // 23^35
3189     18314271962956325083,     // 23^42
3190     14518596982292909406,     // 23^49
3191     11509584370080452960,     // 23^56
3192     18248393082825183718,     // 23^63
3193     14466371651567044709,     // 23^70
3194     11468182859247292218,     // 23^77
3195     18182751177816837937,     // 23^84
3196     14414334182324817337,     // 23^91
3197     11426930275173270071,     // 23^98
3198     18117345395500148774,     // 23^105
3199     14362483898803402166,     // 23^112
3200     11385826082148960918,     // 23^119
3201     18052174886510285819,     // 23^126
3202     14310820127670783127,     // 23^133
3203     11344869746391957446,     // 23^140
3204     17987238804537697299,     // 23^147
3205     14259342198017009262,     // 23^154
3206     11304060736039938888,     // 23^161
3207     17922536306317119829,     // 23^168
3208     14208049441345482237,     // 23^175
3209     11263398521143764220,     // 23^182
3210     17858066551616627705,     // 23^189
3211     14156941191564275184,     // 23^196
3212     11222882573660590193,     // 23^203
3213     17793828703226721580,     // 23^210
3214     14106016784977482782,     // 23^217
3215     11182512367447014130,     // 23^224
3216 ];
3217 const BASE23_LARGE_EXPONENT: [i32; 69] = [
3218     -1203,                    // 23^-252
3219     -1172,                    // 23^-245
3220     -1140,                    // 23^-238
3221     -1108,                    // 23^-231
3222     -1077,                    // 23^-224
3223     -1045,                    // 23^-217
3224     -1013,                    // 23^-210
3225     -982,                     // 23^-203
3226     -950,                     // 23^-196
3227     -918,                     // 23^-189
3228     -887,                     // 23^-182
3229     -855,                     // 23^-175
3230     -823,                     // 23^-168
3231     -792,                     // 23^-161
3232     -760,                     // 23^-154
3233     -728,                     // 23^-147
3234     -697,                     // 23^-140
3235     -665,                     // 23^-133
3236     -633,                     // 23^-126
3237     -602,                     // 23^-119
3238     -570,                     // 23^-112
3239     -538,                     // 23^-105
3240     -507,                     // 23^-98
3241     -475,                     // 23^-91
3242     -443,                     // 23^-84
3243     -412,                     // 23^-77
3244     -380,                     // 23^-70
3245     -348,                     // 23^-63
3246     -317,                     // 23^-56
3247     -285,                     // 23^-49
3248     -253,                     // 23^-42
3249     -222,                     // 23^-35
3250     -190,                     // 23^-28
3251     -158,                     // 23^-21
3252     -127,                     // 23^-14
3253     -95,                      // 23^-7
3254     -63,                      // 23^0
3255     -32,                      // 23^7
3256     0,                        // 23^14
3257     31,                       // 23^21
3258     63,                       // 23^28
3259     95,                       // 23^35
3260     126,                      // 23^42
3261     158,                      // 23^49
3262     190,                      // 23^56
3263     221,                      // 23^63
3264     253,                      // 23^70
3265     285,                      // 23^77
3266     316,                      // 23^84
3267     348,                      // 23^91
3268     380,                      // 23^98
3269     411,                      // 23^105
3270     443,                      // 23^112
3271     475,                      // 23^119
3272     506,                      // 23^126
3273     538,                      // 23^133
3274     570,                      // 23^140
3275     601,                      // 23^147
3276     633,                      // 23^154
3277     665,                      // 23^161
3278     696,                      // 23^168
3279     728,                      // 23^175
3280     760,                      // 23^182
3281     791,                      // 23^189
3282     823,                      // 23^196
3283     855,                      // 23^203
3284     886,                      // 23^210
3285     918,                      // 23^217
3286     950,                      // 23^224
3287 ];
3288 const BASE23_SMALL_INT_POWERS: [u64; 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: [u64; 7] = [
3295     9223372036854775808,      // 24^0
3296     13835058055282163712,     // 24^1
3297     10376293541461622784,     // 24^2
3298     15564440312192434176,     // 24^3
3299     11673330234144325632,     // 24^4
3300     17509995351216488448,     // 24^5
3301     13132496513412366336,     // 24^6
3302 ];
3303 const BASE24_SMALL_EXPONENT: [i32; 7] = [
3304     -63,                      // 24^0
3305     -59,                      // 24^1
3306     -54,                      // 24^2
3307     -50,                      // 24^3
3308     -45,                      // 24^4
3309     -41,                      // 24^5
3310     -36,                      // 24^6
3311 ];
3312 const BASE24_LARGE_MANTISSA: [u64; 68] = [
3313     13878157218102970303,     // 24^-252
3314     14820082927730076197,     // 24^-245
3315     15825938165500818674,     // 24^-238
3316     16900061898413227754,     // 24^-231
3317     18047087583901234911,     // 24^-224
3318     9635981578611328308,      // 24^-217
3319     10289986187706530766,     // 24^-210
3320     10988378804938565813,     // 24^-203
3321     11734172092969064177,     // 24^-196
3322     12530583187169601247,     // 24^-189
3323     13381047573408163051,     // 24^-182
3324     14289233907736158492,     // 24^-175
3325     15259059841903798156,     // 24^-168
3326     16294708922970511019,     // 24^-161
3327     17400648639910404101,     // 24^-154
3328     9290824847530286564,      // 24^-147
3329     9921403291771844100,      // 24^-140
3330     10594779784719249534,     // 24^-133
3331     11313859076748534537,     // 24^-126
3332     12081743066820822770,     // 24^-119
3333     12901744183172431346,     // 24^-112
3334     13777399672167044607,     // 24^-105
3335     14712486856947913357,     // 24^-98
3336     15711039431711468023,     // 24^-91
3337     16777364861891103792,     // 24^-84
3338     17916062965310470700,     // 24^-77
3339     9566022877229980327,      // 24^-70
3340     10215279312745101062,     // 24^-63
3341     10908601492662859386,     // 24^-56
3342     11648980207252770253,     // 24^-49
3343     12439609234991117453,     // 24^-42
3344     13283899119592565366,     // 24^-35
3345     14185491882103974832,     // 24^-28
3346     15148276731524117655,     // 24^-21
3347     16176406841720334625,     // 24^-14
3348     17274317267012876867,     // 24^-7
3349     9223372036854775808,      // 24^0
3350     9849372385059274752,      // 24^7
3351     10517860061584293888,     // 24^14
3352     11231718727873462272,     // 24^21
3353     11994027762626592768,     // 24^28
3354     12808075545343924992,     // 24^35
3355     13677373641439044901,     // 24^42
3356     14605671950110933202,     // 24^49
3357     15596974880318657672,     // 24^56
3358     16655558624637160317,     // 24^63
3359     17785989605508530085,     // 24^70
3360     9496572086730262523,      // 24^77
3361     10141114821132365302,     // 24^84
3362     10829403375886954548,     // 24^91
3363     11564406827668344530,     // 24^98
3364     12349295767632162835,     // 24^105
3365     13187455978423603575,     // 24^112
3366     14082503039459189950,     // 24^119
3367     15038297923484984581,     // 24^126
3368     16058963651690264296,     // 24^133
3369     17148903079221976570,     // 24^140
3370     18312817887821515019,     // 24^147
3371     9777864433756263024,      // 24^154
3372     10441498787414525016,     // 24^161
3373     11150174730505647564,     // 24^168
3374     11906949284968677354,     // 24^175
3375     12715086956165281921,     // 24^182
3376     13578073815006577911,     // 24^189
3377     14499632535849309517,     // 24^196
3378     15483738455030488239,     // 24^203
3379     16534636719312342666,     // 24^210
3380     17656860598210983110,     // 24^217
3381 ];
3382 const BASE24_LARGE_EXPONENT: [i32; 68] = [
3383     -1219,                    // 24^-252
3384     -1187,                    // 24^-245
3385     -1155,                    // 24^-238
3386     -1123,                    // 24^-231
3387     -1091,                    // 24^-224
3388     -1058,                    // 24^-217
3389     -1026,                    // 24^-210
3390     -994,                     // 24^-203
3391     -962,                     // 24^-196
3392     -930,                     // 24^-189
3393     -898,                     // 24^-182
3394     -866,                     // 24^-175
3395     -834,                     // 24^-168
3396     -802,                     // 24^-161
3397     -770,                     // 24^-154
3398     -737,                     // 24^-147
3399     -705,                     // 24^-140
3400     -673,                     // 24^-133
3401     -641,                     // 24^-126
3402     -609,                     // 24^-119
3403     -577,                     // 24^-112
3404     -545,                     // 24^-105
3405     -513,                     // 24^-98
3406     -481,                     // 24^-91
3407     -449,                     // 24^-84
3408     -417,                     // 24^-77
3409     -384,                     // 24^-70
3410     -352,                     // 24^-63
3411     -320,                     // 24^-56
3412     -288,                     // 24^-49
3413     -256,                     // 24^-42
3414     -224,                     // 24^-35
3415     -192,                     // 24^-28
3416     -160,                     // 24^-21
3417     -128,                     // 24^-14
3418     -96,                      // 24^-7
3419     -63,                      // 24^0
3420     -31,                      // 24^7
3421     1,                        // 24^14
3422     33,                       // 24^21
3423     65,                       // 24^28
3424     97,                       // 24^35
3425     129,                      // 24^42
3426     161,                      // 24^49
3427     193,                      // 24^56
3428     225,                      // 24^63
3429     257,                      // 24^70
3430     290,                      // 24^77
3431     322,                      // 24^84
3432     354,                      // 24^91
3433     386,                      // 24^98
3434     418,                      // 24^105
3435     450,                      // 24^112
3436     482,                      // 24^119
3437     514,                      // 24^126
3438     546,                      // 24^133
3439     578,                      // 24^140
3440     610,                      // 24^147
3441     643,                      // 24^154
3442     675,                      // 24^161
3443     707,                      // 24^168
3444     739,                      // 24^175
3445     771,                      // 24^182
3446     803,                      // 24^189
3447     835,                      // 24^196
3448     867,                      // 24^203
3449     899,                      // 24^210
3450     931,                      // 24^217
3451 ];
3452 const BASE24_SMALL_INT_POWERS: [u64; 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: [u64; 7] = [
3459     9223372036854775808,      // 25^0
3460     14411518807585587200,     // 25^1
3461     11258999068426240000,     // 25^2
3462     17592186044416000000,     // 25^3
3463     13743895347200000000,     // 25^4
3464     10737418240000000000,     // 25^5
3465     16777216000000000000,     // 25^6
3466 ];
3467 const BASE25_SMALL_EXPONENT: [i32; 7] = [
3468     -63,                      // 25^0
3469     -59,                      // 25^1
3470     -54,                      // 25^2
3471     -50,                      // 25^3
3472     -45,                      // 25^4
3473     -40,                      // 25^5
3474     -36,                      // 25^6
3475 ];
3476 const BASE25_LARGE_MANTISSA: [u64; 68] = [
3477     15492890949478498119,     // 25^-252
3478     11008361120075348168,     // 25^-245
3479     15643822052986917253,     // 25^-238
3480     11115604119273511155,     // 25^-231
3481     15796223521069679172,     // 25^-224
3482     11223891875338892399,     // 25^-217
3483     15950109677957715915,     // 25^-210
3484     11333234566249726012,     // 25^-203
3485     16105494987428025427,     // 25^-196
3486     11443642469137689536,     // 25^-189
3487     16262394054163123565,     // 25^-182
3488     11555125961253852697,     // 25^-175
3489     16420821625123739831,     // 25^-168
3490     11667695520944036383,     // 25^-161
3491     16580792590934885855,     // 25^-154
3492     11781361728633673532,     // 25^-147
3493     16742321987285426889,     // 25^-140
3494     11896135267822264502,     // 25^-133
3495     16905424996341287883,     // 25^-126
3496     12012026926087520367,     // 25^-119
3497     17070116948172426941,     // 25^-112
3498     12129047596099288555,     // 25^-105
3499     17236413322193710308,     // 25^-98
3500     12247208276643356092,     // 25^-91
3501     17404329748619824289,     // 25^-84
3502     12366520073655226703,     // 25^-77
3503     17573882009934360870,     // 25^-70
3504     12486994201263968925,     // 25^-63
3505     17745086042373215101,     // 25^-56
3506     12608641982846233347,     // 25^-49
3507     17917957937422433684,     // 25^-42
3508     12731474852090538039,     // 25^-35
3509     18092513943330655534,     // 25^-28
3510     12855504354071922204,     // 25^-21
3511     18268770466636286477,     // 25^-14
3512     12980742146337069071,     // 25^-7
3513     9223372036854775808,      // 25^0
3514     13107200000000000000,     // 25^7
3515     9313225746154785156,      // 25^14
3516     13234889800848442797,     // 25^21
3517     9403954806578300063,      // 25^28
3518     13363823550460978230,     // 25^35
3519     9495567745759798747,      // 25^42
3520     13494013367335069727,     // 25^49
3521     9588073174409622174,      // 25^56
3522     13625471488026082303,     // 25^63
3523     9681479787123295682,      // 25^70
3524     13758210268297397763,     // 25^77
3525     9775796363198734982,      // 25^84
3526     13892242184281734271,     // 25^91
3527     9871031767461413346,      // 25^98
3528     14027579833653779454,     // 25^105
3529     9967194951097567535,      // 25^112
3530     14164235936814247246,     // 25^119
3531     10064294952495520794,     // 25^126
3532     14302223338085469768,     // 25^133
3533     10162340898095201970,     // 25^140
3534     14441555006918636608,     // 25^147
3535     10261342003245940623,     // 25^154
3536     14582244039112794984,     // 25^161
3537     10361307573072618726,     // 25^168
3538     14724303658045725350,     // 25^175
3539     10462247003350260393,     // 25^182
3540     14867747215916808149,     // 25^189
3541     10564169781387141817,     // 25^196
3542     15012588195001998509,     // 25^203
3543     10667085486916504429,     // 25^210
3544     15158840208921026870,     // 25^217
3545 ];
3546 const BASE25_LARGE_EXPONENT: [i32; 68] = [
3547     -1234,                    // 25^-252
3548     -1201,                    // 25^-245
3549     -1169,                    // 25^-238
3550     -1136,                    // 25^-231
3551     -1104,                    // 25^-224
3552     -1071,                    // 25^-217
3553     -1039,                    // 25^-210
3554     -1006,                    // 25^-203
3555     -974,                     // 25^-196
3556     -941,                     // 25^-189
3557     -909,                     // 25^-182
3558     -876,                     // 25^-175
3559     -844,                     // 25^-168
3560     -811,                     // 25^-161
3561     -779,                     // 25^-154
3562     -746,                     // 25^-147
3563     -714,                     // 25^-140
3564     -681,                     // 25^-133
3565     -649,                     // 25^-126
3566     -616,                     // 25^-119
3567     -584,                     // 25^-112
3568     -551,                     // 25^-105
3569     -519,                     // 25^-98
3570     -486,                     // 25^-91
3571     -454,                     // 25^-84
3572     -421,                     // 25^-77
3573     -389,                     // 25^-70
3574     -356,                     // 25^-63
3575     -324,                     // 25^-56
3576     -291,                     // 25^-49
3577     -259,                     // 25^-42
3578     -226,                     // 25^-35
3579     -194,                     // 25^-28
3580     -161,                     // 25^-21
3581     -129,                     // 25^-14
3582     -96,                      // 25^-7
3583     -63,                      // 25^0
3584     -31,                      // 25^7
3585     2,                        // 25^14
3586     34,                       // 25^21
3587     67,                       // 25^28
3588     99,                       // 25^35
3589     132,                      // 25^42
3590     164,                      // 25^49
3591     197,                      // 25^56
3592     229,                      // 25^63
3593     262,                      // 25^70
3594     294,                      // 25^77
3595     327,                      // 25^84
3596     359,                      // 25^91
3597     392,                      // 25^98
3598     424,                      // 25^105
3599     457,                      // 25^112
3600     489,                      // 25^119
3601     522,                      // 25^126
3602     554,                      // 25^133
3603     587,                      // 25^140
3604     619,                      // 25^147
3605     652,                      // 25^154
3606     684,                      // 25^161
3607     717,                      // 25^168
3608     749,                      // 25^175
3609     782,                      // 25^182
3610     814,                      // 25^189
3611     847,                      // 25^196
3612     879,                      // 25^203
3613     912,                      // 25^210
3614     944,                      // 25^217
3615 ];
3616 const BASE25_SMALL_INT_POWERS: [u64; 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: [u64; 7] = [
3623     9223372036854775808,      // 26^0
3624     14987979559889010688,     // 26^1
3625     12177733392409821184,     // 26^2
3626     9894408381332979712,      // 26^3
3627     16078413619666092032,     // 26^4
3628     13063711065978699776,     // 26^5
3629     10614265241107693568,     // 26^6
3630 ];
3631 const BASE26_SMALL_EXPONENT: [i32; 7] = [
3632     -63,                      // 26^0
3633     -59,                      // 26^1
3634     -54,                      // 26^2
3635     -49,                      // 26^3
3636     -45,                      // 26^4
3637     -40,                      // 26^5
3638     -35,                      // 26^6
3639 ];
3640 const BASE26_LARGE_MANTISSA: [u64; 67] = [
3641     12105269954044049440,     // 26^-245
3642     11318739317371282802,     // 26^-238
3643     10583312905946974966,     // 26^-231
3644     9895670261906581517,      // 26^-224
3645     9252706671590202790,      // 26^-217
3646     17303038295456506514,     // 26^-210
3647     16178786644847745028,     // 26^-203
3648     15127582383507515360,     // 26^-196
3649     14144679313308326113,     // 26^-189
3650     13225639616708097270,     // 26^-182
3651     12366313819957994305,     // 26^-175
3652     11562822058185475244,     // 26^-168
3653     10811536557764206566,     // 26^-161
3654     10109065256878566708,     // 26^-154
3655     9452236490329416245,      // 26^-147
3656     17676169338865748372,     // 26^-140
3657     16527673784713390059,     // 26^-133
3658     15453800848879553322,     // 26^-126
3659     14449701983936623969,     // 26^-119
3660     13510843673109724761,     // 26^-112
3661     12632986961401522264,     // 26^-105
3662     11812168316666510159,     // 26^-98
3663     11044681734222321153,     // 26^-91
3664     10327062004200202236,     // 26^-84
3665     9656069066086567364,      // 26^-77
3666     18057346759632441273,     // 26^-70
3667     16884084494735168740,     // 26^-63
3668     15787054046203585657,     // 26^-56
3669     14761302310200400353,     // 26^-49
3670     13802198007013635263,     // 26^-42
3671     12905410770780760221,     // 26^-35
3672     12066891597841972649,     // 26^-28
3673     11282854565446737172,     // 26^-21
3674     10549759738273355365,     // 26^-14
3675     9864297185584324446,      // 26^-7
3676     9223372036854775808,      // 26^0
3677     17248181016800002048,     // 26^7
3678     16127493675824287744,     // 26^14
3679     15079622135830712445,     // 26^21
3680     14099835245963182583,     // 26^28
3681     13183709258266090507,     // 26^35
3682     12327107854416477244,     // 26^42
3683     11526163470203963629,     // 26^49
3684     10777259833438283283,     // 26^56
3685     10077015636442889080,     // 26^63
3686     9422269269415772631,      // 26^70
3687     17620129091456925542,     // 26^77
3688     16475274709425560342,     // 26^84
3689     15404806363345084091,     // 26^91
3690     14403890877545881062,     // 26^98
3691     13468009108242878856,     // 26^105
3692     12592935539554553092,     // 26^112
3693     11774719205254957782,     // 26^119
3694     11009665850120294209,     // 26^126
3695     10294321250328313309,     // 26^133
3696     9625455617601982106,      // 26^140
3697     18000098033363922638,     // 26^147
3698     16830555460575262708,     // 26^154
3699     15737003020008648959,     // 26^161
3700     14714503311068774005,     // 26^168
3701     13758439736979533044,     // 26^175
3702     12864495660801764695,     // 26^182
3703     12028634915772762381,     // 26^189
3704     11247083581971537298,     // 26^196
3705     10516312947031287874,     // 26^203
3706     9833023573966516058,      // 26^210
3707     18388260808361729691,     // 26^217
3708 ];
3709 const BASE26_LARGE_EXPONENT: [i32; 67] = [
3710     -1215,                    // 26^-245
3711     -1182,                    // 26^-238
3712     -1149,                    // 26^-231
3713     -1116,                    // 26^-224
3714     -1083,                    // 26^-217
3715     -1051,                    // 26^-210
3716     -1018,                    // 26^-203
3717     -985,                     // 26^-196
3718     -952,                     // 26^-189
3719     -919,                     // 26^-182
3720     -886,                     // 26^-175
3721     -853,                     // 26^-168
3722     -820,                     // 26^-161
3723     -787,                     // 26^-154
3724     -754,                     // 26^-147
3725     -722,                     // 26^-140
3726     -689,                     // 26^-133
3727     -656,                     // 26^-126
3728     -623,                     // 26^-119
3729     -590,                     // 26^-112
3730     -557,                     // 26^-105
3731     -524,                     // 26^-98
3732     -491,                     // 26^-91
3733     -458,                     // 26^-84
3734     -425,                     // 26^-77
3735     -393,                     // 26^-70
3736     -360,                     // 26^-63
3737     -327,                     // 26^-56
3738     -294,                     // 26^-49
3739     -261,                     // 26^-42
3740     -228,                     // 26^-35
3741     -195,                     // 26^-28
3742     -162,                     // 26^-21
3743     -129,                     // 26^-14
3744     -96,                      // 26^-7
3745     -63,                      // 26^0
3746     -31,                      // 26^7
3747     2,                        // 26^14
3748     35,                       // 26^21
3749     68,                       // 26^28
3750     101,                      // 26^35
3751     134,                      // 26^42
3752     167,                      // 26^49
3753     200,                      // 26^56
3754     233,                      // 26^63
3755     266,                      // 26^70
3756     298,                      // 26^77
3757     331,                      // 26^84
3758     364,                      // 26^91
3759     397,                      // 26^98
3760     430,                      // 26^105
3761     463,                      // 26^112
3762     496,                      // 26^119
3763     529,                      // 26^126
3764     562,                      // 26^133
3765     595,                      // 26^140
3766     627,                      // 26^147
3767     660,                      // 26^154
3768     693,                      // 26^161
3769     726,                      // 26^168
3770     759,                      // 26^175
3771     792,                      // 26^182
3772     825,                      // 26^189
3773     858,                      // 26^196
3774     891,                      // 26^203
3775     924,                      // 26^210
3776     956,                      // 26^217
3777 ];
3778 const BASE26_SMALL_INT_POWERS: [u64; 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: [u64; 6] = [
3785     9223372036854775808,      // 27^0
3786     15564440312192434176,     // 27^1
3787     13132496513412366336,     // 27^2
3788     11080543933191684096,     // 27^3
3789     9349208943630483456,      // 27^4
3790     15776790092376440832,     // 27^5
3791 ];
3792 const BASE27_SMALL_EXPONENT: [i32; 6] = [
3793     -63,                      // 27^0
3794     -59,                      // 27^1
3795     -54,                      // 27^2
3796     -49,                      // 27^3
3797     -44,                      // 27^4
3798     -40,                      // 27^5
3799 ];
3800 const BASE27_LARGE_MANTISSA: [u64; 76] = [
3801     16362187946641408838,     // 27^-240
3802     11807394875954316034,     // 27^-234
3803     17041067394086403622,     // 27^-228
3804     12297292543386873229,     // 27^-222
3805     17748114058878258402,     // 27^-216
3806     12807516432401518638,     // 27^-210
3807     9242248309993244326,      // 27^-204
3808     13338909893173747895,     // 27^-198
3809     9625716122873707062,      // 27^-192
3810     13892351267110242231,     // 27^-186
3811     10025094302862174179,     // 27^-180
3812     14468755338661289290,     // 27^-174
3813     10441042983020688038,     // 27^-168
3814     15069074847369989965,     // 27^-162
3815     10874249685827050127,     // 27^-156
3816     15694302062657520659,     // 27^-150
3817     11325430459582219446,     // 27^-144
3818     16345470423947416967,     // 27^-138
3819     11795331061968106016,     // 27^-132
3820     17023656248839843776,     // 27^-126
3821     12284728192712064755,     // 27^-120
3822     17729980512159296735,     // 27^-114
3823     12794430777395563548,     // 27^-108
3824     9232805349408163458,      // 27^-102
3825     13325281304529035642,     // 27^-96
3826     9615881366772943927,      // 27^-90
3827     13878157218102970303,     // 27^-84
3828     10014851495355986817,     // 27^-78
3829     14453972367916992462,     // 27^-72
3830     10430375193750279268,     // 27^-66
3831     15053678520084183432,     // 27^-60
3832     10863139281980340679,     // 27^-54
3833     15678266930207358578,     // 27^-48
3834     11313859076748534537,     // 27^-42
3835     16328769981827608423,     // 27^-36
3836     11783279573783601017,     // 27^-30
3837     17006262892853298360,     // 27^-24
3838     12272176679245716810,     // 27^-18
3839     17711865492790087155,     // 27^-12
3840     12781358492223474271,     // 27^-6
3841     9223372036854775808,      // 27^0
3842     13311666640442621952,     // 27^6
3843     9606056659007943744,      // 27^12
3844     13863977671394362375,     // 27^18
3845     10004619153098548172,     // 27^24
3846     14439204501182606065,     // 27^30
3847     10419718303939637392,     // 27^36
3848     15038297923484984581,     // 27^42
3849     10852040229820157048,     // 27^48
3850     15662248181121787524,     // 27^54
3851     11302299516591361707,     // 27^60
3852     16312086602830473207,     // 27^66
3853     11771240398807322073,     // 27^72
3854     16988887307951181138,     // 27^78
3855     12259637989871837542,     // 27^84
3856     17693768981840924725,     // 27^90
3857     12768299563225066619,     // 27^96
3858     18427896724951050158,     // 27^102
3859     13298065886687551351,     // 27^108
3860     9596241989312152815,      // 27^114
3861     13849812612167175924,     // 27^120
3862     9994397265397337538,      // 27^126
3863     14424451723026109070,     // 27^132
3864     10409072302452601000,     // 27^138
3865     15022933041500086259,     // 27^144
3866     10840952517748290136,     // 27^150
3867     15646245798661648271,     // 27^156
3868     11290751767031273467,     // 27^162
3869     16295420269522331823,     // 27^168
3870     11759213524458657188,     // 27^174
3871     16971529475976476179,     // 27^180
3872     12247112111487835932,     // 27^186
3873     17675690960401445308,     // 27^192
3874     12755253976754113245,     // 27^198
3875     18409068632845853217,     // 27^204
3876     13284479029051404288,     // 27^210
3877 ];
3878 const BASE27_LARGE_EXPONENT: [i32; 76] = [
3879     -1205,                    // 27^-240
3880     -1176,                    // 27^-234
3881     -1148,                    // 27^-228
3882     -1119,                    // 27^-222
3883     -1091,                    // 27^-216
3884     -1062,                    // 27^-210
3885     -1033,                    // 27^-204
3886     -1005,                    // 27^-198
3887     -976,                     // 27^-192
3888     -948,                     // 27^-186
3889     -919,                     // 27^-180
3890     -891,                     // 27^-174
3891     -862,                     // 27^-168
3892     -834,                     // 27^-162
3893     -805,                     // 27^-156
3894     -777,                     // 27^-150
3895     -748,                     // 27^-144
3896     -720,                     // 27^-138
3897     -691,                     // 27^-132
3898     -663,                     // 27^-126
3899     -634,                     // 27^-120
3900     -606,                     // 27^-114
3901     -577,                     // 27^-108
3902     -548,                     // 27^-102
3903     -520,                     // 27^-96
3904     -491,                     // 27^-90
3905     -463,                     // 27^-84
3906     -434,                     // 27^-78
3907     -406,                     // 27^-72
3908     -377,                     // 27^-66
3909     -349,                     // 27^-60
3910     -320,                     // 27^-54
3911     -292,                     // 27^-48
3912     -263,                     // 27^-42
3913     -235,                     // 27^-36
3914     -206,                     // 27^-30
3915     -178,                     // 27^-24
3916     -149,                     // 27^-18
3917     -121,                     // 27^-12
3918     -92,                      // 27^-6
3919     -63,                      // 27^0
3920     -35,                      // 27^6
3921     -6,                       // 27^12
3922     22,                       // 27^18
3923     51,                       // 27^24
3924     79,                       // 27^30
3925     108,                      // 27^36
3926     136,                      // 27^42
3927     165,                      // 27^48
3928     193,                      // 27^54
3929     222,                      // 27^60
3930     250,                      // 27^66
3931     279,                      // 27^72
3932     307,                      // 27^78
3933     336,                      // 27^84
3934     364,                      // 27^90
3935     393,                      // 27^96
3936     421,                      // 27^102
3937     450,                      // 27^108
3938     479,                      // 27^114
3939     507,                      // 27^120
3940     536,                      // 27^126
3941     564,                      // 27^132
3942     593,                      // 27^138
3943     621,                      // 27^144
3944     650,                      // 27^150
3945     678,                      // 27^156
3946     707,                      // 27^162
3947     735,                      // 27^168
3948     764,                      // 27^174
3949     792,                      // 27^180
3950     821,                      // 27^186
3951     849,                      // 27^192
3952     878,                      // 27^198
3953     906,                      // 27^204
3954     935,                      // 27^210
3955 ];
3956 const BASE27_SMALL_INT_POWERS: [u64; 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: [u64; 6] = [
3963     9223372036854775808,      // 28^0
3964     16140901064495857664,     // 28^1
3965     14123288431433875456,     // 28^2
3966     12357877377504641024,     // 28^3
3967     10813142705316560896,     // 28^4
3968     9461499867151990784,      // 28^5
3969 ];
3970 const BASE28_SMALL_EXPONENT: [i32; 6] = [
3971     -63,                      // 28^0
3972     -59,                      // 28^1
3973     -54,                      // 28^2
3974     -49,                      // 28^3
3975     -44,                      // 28^4
3976     -39,                      // 28^5
3977 ];
3978 const BASE28_LARGE_MANTISSA: [u64; 76] = [
3979     10853684694473876180,     // 28^-240
3980     9742165760957008810,      // 28^-234
3981     17488953546307848045,     // 28^-228
3982     15697920957714630238,     // 28^-222
3983     14090306875260685218,     // 28^-216
3984     12647327526607851831,     // 28^-210
3985     11352122773573968201,     // 28^-204
3986     10189559113984709052,     // 28^-198
3987     18292105715960495534,     // 28^-192
3988     16418822825447359765,     // 28^-186
3989     14737381642082644874,     // 28^-180
3990     13228135778880165762,     // 28^-174
3991     11873450822826176619,     // 28^-168
3992     10657498289906897377,     // 28^-162
3993     9566070681070377880,      // 28^-156
3994     17172830956378919788,     // 28^-150
3995     15414172280784786485,     // 28^-144
3996     13835616719528574716,     // 28^-138
3997     12418720027433908743,     // 28^-132
3998     11146926822720122755,     // 28^-126
3999     10005377149705503250,     // 28^-120
4000     17961465702601665525,     // 28^-114
4001     16122043445170466212,     // 28^-108
4002     14470995249030000148,     // 28^-102
4003     12989029846596759700,     // 28^-96
4004     11658831576707932907,     // 28^-90
4005     10464858064026730335,     // 28^-84
4006     9393158617970892313,      // 28^-78
4007     16862422458582420498,     // 28^-72
4008     15135552519453149331,     // 28^-66
4009     13585530230416439557,     // 28^-60
4010     12194244736314878063,     // 28^-54
4011     10945439903127358164,     // 28^-48
4012     9824524377159351811,      // 28^-42
4013     17636802191900948811,     // 28^-36
4014     15830628517722738088,     // 28^-30
4015     14209423938610553080,     // 28^-24
4016     12754245887402290033,     // 28^-18
4017     11448091693168579255,     // 28^-12
4018     10275699917675706335,     // 28^-6
4019     9223372036854775808,      // 28^0
4020     16557624767515983872,     // 28^6
4021     14861968965709594624,     // 28^12
4022     13339964194082398208,     // 28^18
4023     11973826961285400900,     // 28^24
4024     10747594971986893695,     // 28^30
4025     9646940619348801089,      // 28^36
4026     17318007155239366140,     // 28^42
4027     15544481077627229210,     // 28^48
4028     13952580675520064463,     // 28^54
4029     12523705779222565186,     // 28^60
4030     11241161050565762112,     // 28^66
4031     10089960910324183248,     // 28^72
4032     18113308885783841476,     // 28^78
4033     16258336464718499495,     // 28^84
4034     14593330587292989709,     // 28^90
4035     13098836900821174211,     // 28^96
4036     11757393360479052160,     // 28^102
4037     10553326198326110898,     // 28^108
4038     9472566787009190529,      // 28^114
4039     17004974516675479989,     // 28^120
4040     15263505912112072336,     // 28^126
4041     13700379997665963732,     // 28^132
4042     12297332812083457696,     // 28^138
4043     11037970794744924274,     // 28^144
4044     9907579239127697723,      // 28^150
4045     17785900724855568076,     // 28^156
4046     15964457964924108341,     // 28^162
4047     14329547997401095751,     // 28^168
4048     12862068117875988113,     // 28^174
4049     11544871917724549298,     // 28^180
4050     10362568941103939059,     // 28^186
4051     9301344858947275744,      // 28^192
4052     16697600117649658875,     // 28^198
4053     14987609529429357277,     // 28^204
4054     13452737987730670580,     // 28^210
4055 ];
4056 const BASE28_LARGE_EXPONENT: [i32; 76] = [
4057     -1217,                    // 28^-240
4058     -1188,                    // 28^-234
4059     -1160,                    // 28^-228
4060     -1131,                    // 28^-222
4061     -1102,                    // 28^-216
4062     -1073,                    // 28^-210
4063     -1044,                    // 28^-204
4064     -1015,                    // 28^-198
4065     -987,                     // 28^-192
4066     -958,                     // 28^-186
4067     -929,                     // 28^-180
4068     -900,                     // 28^-174
4069     -871,                     // 28^-168
4070     -842,                     // 28^-162
4071     -813,                     // 28^-156
4072     -785,                     // 28^-150
4073     -756,                     // 28^-144
4074     -727,                     // 28^-138
4075     -698,                     // 28^-132
4076     -669,                     // 28^-126
4077     -640,                     // 28^-120
4078     -612,                     // 28^-114
4079     -583,                     // 28^-108
4080     -554,                     // 28^-102
4081     -525,                     // 28^-96
4082     -496,                     // 28^-90
4083     -467,                     // 28^-84
4084     -438,                     // 28^-78
4085     -410,                     // 28^-72
4086     -381,                     // 28^-66
4087     -352,                     // 28^-60
4088     -323,                     // 28^-54
4089     -294,                     // 28^-48
4090     -265,                     // 28^-42
4091     -237,                     // 28^-36
4092     -208,                     // 28^-30
4093     -179,                     // 28^-24
4094     -150,                     // 28^-18
4095     -121,                     // 28^-12
4096     -92,                      // 28^-6
4097     -63,                      // 28^0
4098     -35,                      // 28^6
4099     -6,                       // 28^12
4100     23,                       // 28^18
4101     52,                       // 28^24
4102     81,                       // 28^30
4103     110,                      // 28^36
4104     138,                      // 28^42
4105     167,                      // 28^48
4106     196,                      // 28^54
4107     225,                      // 28^60
4108     254,                      // 28^66
4109     283,                      // 28^72
4110     311,                      // 28^78
4111     340,                      // 28^84
4112     369,                      // 28^90
4113     398,                      // 28^96
4114     427,                      // 28^102
4115     456,                      // 28^108
4116     485,                      // 28^114
4117     513,                      // 28^120
4118     542,                      // 28^126
4119     571,                      // 28^132
4120     600,                      // 28^138
4121     629,                      // 28^144
4122     658,                      // 28^150
4123     686,                      // 28^156
4124     715,                      // 28^162
4125     744,                      // 28^168
4126     773,                      // 28^174
4127     802,                      // 28^180
4128     831,                      // 28^186
4129     860,                      // 28^192
4130     888,                      // 28^198
4131     917,                      // 28^204
4132     946,                      // 28^210
4133 ];
4134 const BASE28_SMALL_INT_POWERS: [u64; 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: [u64; 6] = [
4141     9223372036854775808,      // 29^0
4142     16717361816799281152,     // 29^1
4143     15150109146474348544,     // 29^2
4144     13729786413992378368,     // 29^3
4145     12442618937680592896,     // 29^4
4146     11276123412273037312,     // 29^5
4147 ];
4148 const BASE29_SMALL_EXPONENT: [i32; 6] = [
4149     -63,                      // 29^0
4150     -59,                      // 29^1
4151     -54,                      // 29^2
4152     -49,                      // 29^3
4153     -44,                      // 29^4
4154     -39,                      // 29^5
4155 ];
4156 const BASE29_LARGE_MANTISSA: [u64; 76] = [
4157     9780142334064946636,      // 29^-240
4158     10835857583212112985,     // 29^-234
4159     12005531775819627369,     // 29^-228
4160     13301466184228767173,     // 29^-222
4161     14737289938837575007,     // 29^-216
4162     16328103363438049788,     // 29^-210
4163     18090636782853846909,     // 29^-204
4164     10021713236516230810,     // 29^-198
4165     11103504802015131117,     // 29^-192
4166     12302070113036945059,     // 29^-186
4167     13630014285094069421,     // 29^-180
4168     15101303090037955289,     // 29^-174
4169     16731409831799452344,     // 29^-168
4170     9268739038298839376,      // 29^-162
4171     10269250974512215384,     // 29^-156
4172     11377762945074294339,     // 29^-150
4173     12605932989231929836,     // 29^-144
4174     13966677570638048918,     // 29^-138
4175     15474307417689145256,     // 29^-132
4176     17144678027117236568,     // 29^-126
4177     9497678206828984163,      // 29^-120
4178     10522902929736936910,     // 29^-114
4179     11658795303156142066,     // 29^-108
4180     12917301321555931503,     // 29^-102
4181     14311656487072982013,     // 29^-96
4182     15856525005124406387,     // 29^-90
4183     17568154005459773215,     // 29^-84
4184     9732272205284828726,      // 29^-78
4185     10782820124222926001,     // 29^-72
4186     11946769200332301461,     // 29^-66
4187     13236360495839591806,     // 29^-60
4188     14665156431661011058,     // 29^-54
4189     16248183421166822582,     // 29^-48
4190     18002089900515211938,     // 29^-42
4191     9972660708767378680,      // 29^-36
4192     11049157310268331325,     // 29^-30
4193     12241856093602695018,     // 29^-24
4194     13563300476969856592,     // 29^-18
4195     15027387875005778139,     // 29^-12
4196     16649515855621676607,     // 29^-6
4197     9223372036854775808,      // 29^0
4198     10218986842372440064,     // 29^6
4199     11322073062575009312,     // 29^12
4200     12544231674979455490,     // 29^18
4201     13898315921993315819,     // 29^24
4202     15398566486364679514,     // 29^30
4203     17060761258115507449,     // 29^36
4204     9451190634016324153,      // 29^42
4205     10471397266405980105,     // 29^48
4206     11601729872662437745,     // 29^54
4207     12854075976092328003,     // 29^60
4208     14241606296013212103,     // 29^66
4209     15778913262056350490,     // 29^72
4210     17482164480364512070,     // 29^78
4211     9684636382831873707,      // 29^84
4212     10730042263704319491,     // 29^90
4213     11888294245613666403,     // 29^96
4214     13171573475377840424,     // 29^102
4215     14593375990949121808,     // 29^108
4216     16168654657039833397,     // 29^114
4217     17913976421956996862,     // 29^120
4218     9923848274745194421,      // 29^126
4219     10995075829111145761,     // 29^132
4220     12181936799210906401,     // 29^138
4221     13496913207916061440,     // 29^144
4222     14953834447230017102,     // 29^150
4223     16568022719743769659,     // 29^156
4224     18356454179736676324,     // 29^162
4225     10168968734308426004,     // 29^168
4226     11266655761164621625,     // 29^174
4227     12482832365519782645,     // 29^180
4228     13830288877980342143,     // 29^186
4229     15323196278493163895,     // 29^192
4230     16977255230225892037,     // 29^198
4231     9404930600437880197,      // 29^204
4232     10420143703980341466,     // 29^210
4233 ];
4234 const BASE29_LARGE_EXPONENT: [i32; 76] = [
4235     -1229,                    // 29^-240
4236     -1200,                    // 29^-234
4237     -1171,                    // 29^-228
4238     -1142,                    // 29^-222
4239     -1113,                    // 29^-216
4240     -1084,                    // 29^-210
4241     -1055,                    // 29^-204
4242     -1025,                    // 29^-198
4243     -996,                     // 29^-192
4244     -967,                     // 29^-186
4245     -938,                     // 29^-180
4246     -909,                     // 29^-174
4247     -880,                     // 29^-168
4248     -850,                     // 29^-162
4249     -821,                     // 29^-156
4250     -792,                     // 29^-150
4251     -763,                     // 29^-144
4252     -734,                     // 29^-138
4253     -705,                     // 29^-132
4254     -676,                     // 29^-126
4255     -646,                     // 29^-120
4256     -617,                     // 29^-114
4257     -588,                     // 29^-108
4258     -559,                     // 29^-102
4259     -530,                     // 29^-96
4260     -501,                     // 29^-90
4261     -472,                     // 29^-84
4262     -442,                     // 29^-78
4263     -413,                     // 29^-72
4264     -384,                     // 29^-66
4265     -355,                     // 29^-60
4266     -326,                     // 29^-54
4267     -297,                     // 29^-48
4268     -268,                     // 29^-42
4269     -238,                     // 29^-36
4270     -209,                     // 29^-30
4271     -180,                     // 29^-24
4272     -151,                     // 29^-18
4273     -122,                     // 29^-12
4274     -93,                      // 29^-6
4275     -63,                      // 29^0
4276     -34,                      // 29^6
4277     -5,                       // 29^12
4278     24,                       // 29^18
4279     53,                       // 29^24
4280     82,                       // 29^30
4281     111,                      // 29^36
4282     141,                      // 29^42
4283     170,                      // 29^48
4284     199,                      // 29^54
4285     228,                      // 29^60
4286     257,                      // 29^66
4287     286,                      // 29^72
4288     315,                      // 29^78
4289     345,                      // 29^84
4290     374,                      // 29^90
4291     403,                      // 29^96
4292     432,                      // 29^102
4293     461,                      // 29^108
4294     490,                      // 29^114
4295     519,                      // 29^120
4296     549,                      // 29^126
4297     578,                      // 29^132
4298     607,                      // 29^138
4299     636,                      // 29^144
4300     665,                      // 29^150
4301     694,                      // 29^156
4302     723,                      // 29^162
4303     753,                      // 29^168
4304     782,                      // 29^174
4305     811,                      // 29^180
4306     840,                      // 29^186
4307     869,                      // 29^192
4308     898,                      // 29^198
4309     928,                      // 29^204
4310     957,                      // 29^210
4311 ];
4312 const BASE29_SMALL_INT_POWERS: [u64; 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: [u64; 6] = [
4319     9223372036854775808,      // 30^0
4320     17293822569102704640,     // 30^1
4321     16212958658533785600,     // 30^2
4322     15199648742375424000,     // 30^3
4323     14249670695976960000,     // 30^4
4324     13359066277478400000,     // 30^5
4325 ];
4326 const BASE30_SMALL_EXPONENT: [i32; 6] = [
4327     -63,                      // 30^0
4328     -59,                      // 30^1
4329     -54,                      // 30^2
4330     -49,                      // 30^3
4331     -44,                      // 30^4
4332     -39,                      // 30^5
4333 ];
4334 const BASE30_LARGE_MANTISSA: [u64; 74] = [
4335     15921395853562858335,     // 30^-234
4336     10809579470425214363,     // 30^-228
4337     14677985448278451843,     // 30^-222
4338     9965385675239368708,      // 30^-216
4339     13531681443098000788,     // 30^-210
4340     18374241463874359754,     // 30^-204
4341     12474900136854879801,     // 30^-198
4342     16939271613521887687,     // 30^-192
4343     11500650091336533543,     // 30^-186
4344     15616368347004676150,     // 30^-180
4345     10602485877430447296,     // 30^-174
4346     14396779620362065880,     // 30^-168
4347     9774465433549085656,      // 30^-162
4348     13272436896445757604,     // 30^-156
4349     18022221508452589239,     // 30^-150
4350     12235901765210495847,     // 30^-144
4351     16614743297618723424,     // 30^-138
4352     11280316732790367097,     // 30^-132
4353     15317184660964044954,     // 30^-126
4354     10399359853791807565,     // 30^-120
4355     14120961229157126909,     // 30^-114
4356     9587202906660312336,      // 30^-108
4357     13018159044823362852,     // 30^-102
4358     17676945670836105047,     // 30^-96
4359     12001482205502242389,     // 30^-90
4360     16296432405358431306,     // 30^-84
4361     11064204595523231124,     // 30^-78
4362     15023732837543702665,     // 30^-72
4363     10200125387468709836,     // 30^-66
4364     13850427060322257636,     // 30^-60
4365     9403528018831206315,      // 30^-54
4366     12768752734601403407,     // 30^-48
4367     17338284744926585040,     // 30^-42
4368     11771553735296689434,     // 30^-36
4369     15984219821228248249,     // 30^-30
4370     10852232807944894743,     // 30^-24
4371     14735903063773789011,     // 30^-18
4372     10004707922685045925,     // 30^-12
4373     13585075876931470780,     // 30^-6
4374     9223372036854775808,      // 30^0
4375     12524124635136000000,     // 30^6
4376     17006112000000000000,     // 30^12
4377     11546030312776565551,     // 30^18
4378     15677988711770840524,     // 30^24
4379     10644322047830505987,     // 30^30
4380     14453587630518598230,     // 30^36
4381     9813034332029575584,      // 30^42
4382     13324808381590173768,     // 30^48
4383     18093335088676282534,     // 30^54
4384     12284183203843431517,     // 30^60
4385     16680303133282552614,     // 30^66
4386     11324827544542942993,     // 30^72
4387     15377624481863911156,     // 30^78
4388     10440394512637323916,     // 30^84
4389     14176680892170610158,     // 30^90
4390     9625032889090827484,      // 30^96
4391     13069527179276967861,     // 30^102
4392     17746696832949127203,     // 30^108
4393     12048838651943871501,     // 30^114
4394     16360736223435182728,     // 30^120
4395     11107862654034279481,     // 30^126
4396     15083014731837417449,     // 30^132
4397     10240373890390132852,     // 30^138
4398     13905079227116716745,     // 30^144
4399     9440633241616270046,      // 30^150
4400     12819136740897336720,     // 30^156
4401     17406699590597596894,     // 30^162
4402     11818002910861417777,     // 30^168
4403     16047291684929232224,     // 30^174
4404     10895054450550498712,     // 30^180
4405     14794049215412351417,     // 30^186
4406     10044185331124443731,     // 30^192
4407     13638680998961850032,     // 30^198
4408     9259766385185707988,      // 30^204
4409 ];
4410 const BASE30_LARGE_EXPONENT: [i32; 74] = [
4411     -1212,                    // 30^-234
4412     -1182,                    // 30^-228
4413     -1153,                    // 30^-222
4414     -1123,                    // 30^-216
4415     -1094,                    // 30^-210
4416     -1065,                    // 30^-204
4417     -1035,                    // 30^-198
4418     -1006,                    // 30^-192
4419     -976,                     // 30^-186
4420     -947,                     // 30^-180
4421     -917,                     // 30^-174
4422     -888,                     // 30^-168
4423     -858,                     // 30^-162
4424     -829,                     // 30^-156
4425     -800,                     // 30^-150
4426     -770,                     // 30^-144
4427     -741,                     // 30^-138
4428     -711,                     // 30^-132
4429     -682,                     // 30^-126
4430     -652,                     // 30^-120
4431     -623,                     // 30^-114
4432     -593,                     // 30^-108
4433     -564,                     // 30^-102
4434     -535,                     // 30^-96
4435     -505,                     // 30^-90
4436     -476,                     // 30^-84
4437     -446,                     // 30^-78
4438     -417,                     // 30^-72
4439     -387,                     // 30^-66
4440     -358,                     // 30^-60
4441     -328,                     // 30^-54
4442     -299,                     // 30^-48
4443     -270,                     // 30^-42
4444     -240,                     // 30^-36
4445     -211,                     // 30^-30
4446     -181,                     // 30^-24
4447     -152,                     // 30^-18
4448     -122,                     // 30^-12
4449     -93,                      // 30^-6
4450     -63,                      // 30^0
4451     -34,                      // 30^6
4452     -5,                       // 30^12
4453     25,                       // 30^18
4454     54,                       // 30^24
4455     84,                       // 30^30
4456     113,                      // 30^36
4457     143,                      // 30^42
4458     172,                      // 30^48
4459     201,                      // 30^54
4460     231,                      // 30^60
4461     260,                      // 30^66
4462     290,                      // 30^72
4463     319,                      // 30^78
4464     349,                      // 30^84
4465     378,                      // 30^90
4466     408,                      // 30^96
4467     437,                      // 30^102
4468     466,                      // 30^108
4469     496,                      // 30^114
4470     525,                      // 30^120
4471     555,                      // 30^126
4472     584,                      // 30^132
4473     614,                      // 30^138
4474     643,                      // 30^144
4475     673,                      // 30^150
4476     702,                      // 30^156
4477     731,                      // 30^162
4478     761,                      // 30^168
4479     790,                      // 30^174
4480     820,                      // 30^180
4481     849,                      // 30^186
4482     879,                      // 30^192
4483     908,                      // 30^198
4484     938,                      // 30^204
4485 ];
4486 const BASE30_SMALL_INT_POWERS: [u64; 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: [u64; 6] = [
4493     9223372036854775808,      // 31^0
4494     17870283321406128128,     // 31^1
4495     17311836967612186624,     // 31^2
4496     16770842062374305792,     // 31^3
4497     16246753247925108736,     // 31^4
4498     15739042208927449088,     // 31^5
4499 ];
4500 const BASE31_SMALL_EXPONENT: [i32; 6] = [
4501     -63,                      // 31^0
4502     -59,                      // 31^1
4503     -54,                      // 31^2
4504     -49,                      // 31^3
4505     -44,                      // 31^4
4506     -39,                      // 31^5
4507 ];
4508 const BASE31_LARGE_MANTISSA: [u64; 74] = [
4509     15172192345302428421,     // 31^-234
4510     12540609161645107233,     // 31^-228
4511     10365468257053156090,     // 31^-222
4512     17135201456813756829,     // 31^-216
4513     14163138687236953263,     // 31^-210
4514     11706573627364173290,     // 31^-204
4515     9676094340331131706,      // 31^-198
4516     15995594383677739926,     // 31^-192
4517     13221193938792609146,     // 31^-186
4518     10928007110853986174,     // 31^-180
4519     18065136926019727780,     // 31^-174
4520     14931778907414090897,     // 31^-168
4521     12341894902482781431,     // 31^-162
4522     10201220546354171409,     // 31^-156
4523     16863682839241173595,     // 31^-150
4524     13938714372965575021,     // 31^-144
4525     11521075213714088050,     // 31^-138
4526     9522770215989197442,      // 31^-132
4527     15742133595063495983,     // 31^-126
4528     13011695363011784957,     // 31^-120
4529     10754845599386459585,     // 31^-114
4530     17778882864941161542,     // 31^-108
4531     14695174979700806287,     // 31^-102
4532     12146329402386737855,     // 31^-96
4533     10039575449430160254,     // 31^-90
4534     16596466614020050649,     // 31^-84
4535     13717846210614220387,     // 31^-78
4536     11338516145303865769,     // 31^-72
4537     9371875613960541536,      // 31^-66
4538     15492689060539222513,     // 31^-60
4539     12805516430937677459,     // 31^-54
4540     10584427946771654325,     // 31^-48
4541     17497164689077279120,     // 31^-42
4542     14462320197950402007,     // 31^-36
4543     11953862767183809017,     // 31^-30
4544     9880491726141866768,      // 31^-24
4545     16333484606893641287,     // 31^-18
4546     13500477850600094178,     // 31^-12
4547     11158849846261135900,     // 31^-6
4548     9223372036854775808,      // 31^0
4549     15247197139898466304,     // 31^6
4550     12602604540616796176,     // 31^12
4551     10416710674748495795,     // 31^18
4552     17219910524322248562,     // 31^24
4553     14233155154461633068,     // 31^30
4554     11764445893307051548,     // 31^36
4555     9723928789827359386,      // 31^42
4556     16074669723871456105,     // 31^48
4557     13286553836236866995,     // 31^54
4558     10982030478739077827,     // 31^60
4559     18154443194596327488,     // 31^66
4560     15005595201356001156,     // 31^72
4561     12402907923608447627,     // 31^78
4562     10251650993997756459,     // 31^84
4563     16947049635463054782,     // 31^90
4564     14007621382887632827,     // 31^96
4565     11578030455268066882,     // 31^102
4566     9569846696947249770,      // 31^108
4567     15819955934111728582,     // 31^114
4568     13076019589586139267,     // 31^120
4569     10808012931221917147,     // 31^126
4570     17866774016535005152,     // 31^132
4571     14767821605568725557,     // 31^138
4572     12206375631777172937,     // 31^144
4573     10089206793225315915,     // 31^150
4574     16678512408132988469,     // 31^156
4575     13785661343319529298,     // 31^162
4576     11394568893327831301,     // 31^168
4577     9418206136893990095,      // 31^174
4578     15569278253075119325,     // 31^180
4579     12868821397533098208,     // 31^186
4580     10636752807015729117,     // 31^192
4581     17583663147154342787,     // 31^198
4582     14533815689909759814,     // 31^204
4583 ];
4584 const BASE31_LARGE_EXPONENT: [i32; 74] = [
4585     -1223,                    // 31^-234
4586     -1193,                    // 31^-228
4587     -1163,                    // 31^-222
4588     -1134,                    // 31^-216
4589     -1104,                    // 31^-210
4590     -1074,                    // 31^-204
4591     -1044,                    // 31^-198
4592     -1015,                    // 31^-192
4593     -985,                     // 31^-186
4594     -955,                     // 31^-180
4595     -926,                     // 31^-174
4596     -896,                     // 31^-168
4597     -866,                     // 31^-162
4598     -836,                     // 31^-156
4599     -807,                     // 31^-150
4600     -777,                     // 31^-144
4601     -747,                     // 31^-138
4602     -717,                     // 31^-132
4603     -688,                     // 31^-126
4604     -658,                     // 31^-120
4605     -628,                     // 31^-114
4606     -599,                     // 31^-108
4607     -569,                     // 31^-102
4608     -539,                     // 31^-96
4609     -509,                     // 31^-90
4610     -480,                     // 31^-84
4611     -450,                     // 31^-78
4612     -420,                     // 31^-72
4613     -390,                     // 31^-66
4614     -361,                     // 31^-60
4615     -331,                     // 31^-54
4616     -301,                     // 31^-48
4617     -272,                     // 31^-42
4618     -242,                     // 31^-36
4619     -212,                     // 31^-30
4620     -182,                     // 31^-24
4621     -153,                     // 31^-18
4622     -123,                     // 31^-12
4623     -93,                      // 31^-6
4624     -63,                      // 31^0
4625     -34,                      // 31^6
4626     -4,                       // 31^12
4627     26,                       // 31^18
4628     55,                       // 31^24
4629     85,                       // 31^30
4630     115,                      // 31^36
4631     145,                      // 31^42
4632     174,                      // 31^48
4633     204,                      // 31^54
4634     234,                      // 31^60
4635     263,                      // 31^66
4636     293,                      // 31^72
4637     323,                      // 31^78
4638     353,                      // 31^84
4639     382,                      // 31^90
4640     412,                      // 31^96
4641     442,                      // 31^102
4642     472,                      // 31^108
4643     501,                      // 31^114
4644     531,                      // 31^120
4645     561,                      // 31^126
4646     590,                      // 31^132
4647     620,                      // 31^138
4648     650,                      // 31^144
4649     680,                      // 31^150
4650     709,                      // 31^156
4651     739,                      // 31^162
4652     769,                      // 31^168
4653     799,                      // 31^174
4654     828,                      // 31^180
4655     858,                      // 31^186
4656     888,                      // 31^192
4657     917,                      // 31^198
4658     947,                      // 31^204
4659 ];
4660 const BASE31_SMALL_INT_POWERS: [u64; 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: [u64; 6] = [
4667     9223372036854775808,      // 33^0
4668     9511602413006487552,      // 33^1
4669     9808839988412940288,      // 33^2
4670     10115366238050844672,     // 33^3
4671     10431471432989933568,     // 33^4
4672     10757454915270868992,     // 33^5
4673 ];
4674 const BASE33_SMALL_EXPONENT: [i32; 6] = [
4675     -63,                      // 33^0
4676     -58,                      // 33^1
4677     -53,                      // 33^2
4678     -48,                      // 33^3
4679     -43,                      // 33^4
4680     -38,                      // 33^5
4681 ];
4682 const BASE33_LARGE_MANTISSA: [u64; 72] = [
4683     16952605037124200569,     // 33^-228
4684     10195070131008495069,     // 33^-222
4685     12262357879342609130,     // 33^-216
4686     14748836332546310936,     // 33^-210
4687     17739506162243888511,     // 33^-204
4688     10668301952265249182,     // 33^-198
4689     12831548466319904021,     // 33^-192
4690     15433443558330863109,     // 33^-186
4691     9281466718275888268,      // 33^-180
4692     11163500111543439891,     // 33^-174
4693     13427159577595330562,     // 33^-168
4694     16149828684624228128,     // 33^-162
4695     9712291160146516482,      // 33^-156
4696     11681684235978010467,     // 33^-150
4697     14050417593436164695,     // 33^-144
4698     16899466768835551431,     // 33^-138
4699     10163113486548439647,     // 33^-132
4700     12223921281461810852,     // 33^-126
4701     14702605819874780450,     // 33^-120
4702     17683901337162836029,     // 33^-114
4703     10634861953510936381,     // 33^-108
4704     12791327729538214791,     // 33^-102
4705     15385067131072375518,     // 33^-96
4706     9252373781378705800,      // 33^-90
4707     11128507904583594948,     // 33^-84
4708     13385071886268464065,     // 33^-78
4709     16099206734335173177,     // 33^-72
4710     9681847795705762071,      // 33^-66
4711     11645067770860388376,     // 33^-60
4712     14006376287807173243,     // 33^-54
4713     16846495063476347823,     // 33^-48
4714     10131257010808365886,     // 33^-42
4715     12185605163840289543,     // 33^-36
4716     14656520217639143557,     // 33^-30
4717     17628470806481188820,     // 33^-24
4718     10601526773079323099,     // 33^-18
4719     12751233065433685927,     // 33^-12
4720     15336842340660548274,     // 33^-6
4721     9223372036854775808,      // 33^0
4722     11093625381373083648,     // 33^6
4723     13343116119623879688,     // 33^12
4724     16048743459528137878,     // 33^18
4725     9651499856579507665,      // 33^24
4726     11608566080760702539,     // 33^30
4727     13962473030502269494,     // 33^36
4728     16793689398951866695,     // 33^42
4729     10099500389807484117,     // 33^48
4730     12147409148830342864,     // 33^54
4731     14610579071614836924,     // 33^60
4732     17573214023869781748,     // 33^66
4733     10568296082415350040,     // 33^72
4734     12711264078829073096,     // 33^78
4735     15288768711786753433,     // 33^84
4736     18388922397719682024,     // 33^90
4737     11058852198106072831,     // 33^96
4738     13301291864141109889,     // 33^102
4739     15998438362831755651,     // 33^108
4740     9621247043655259795,      // 33^114
4741     11572178805914439916,     // 33^120
4742     13918707388806312258,     // 33^126
4743     16741049254803901004,     // 33^132
4744     10067843310549183526,     // 33^138
4745     12109332859968012500,     // 33^144
4746     14564781929001072895,     // 33^150
4747     17518130444711929011,     // 33^156
4748     10535169553993820096,     // 33^162
4749     12671420375785822681,     // 33^168
4750     15240845770632227134,     // 33^174
4751     18331281964891256972,     // 33^180
4752     11024188012054395372,     // 33^186
4753     13259598707595875029,     // 33^192
4754     15948290948433680084,     // 33^198
4755 ];
4756 const BASE33_LARGE_EXPONENT: [i32; 72] = [
4757     -1214,                    // 33^-228
4758     -1183,                    // 33^-222
4759     -1153,                    // 33^-216
4760     -1123,                    // 33^-210
4761     -1093,                    // 33^-204
4762     -1062,                    // 33^-198
4763     -1032,                    // 33^-192
4764     -1002,                    // 33^-186
4765     -971,                     // 33^-180
4766     -941,                     // 33^-174
4767     -911,                     // 33^-168
4768     -881,                     // 33^-162
4769     -850,                     // 33^-156
4770     -820,                     // 33^-150
4771     -790,                     // 33^-144
4772     -760,                     // 33^-138
4773     -729,                     // 33^-132
4774     -699,                     // 33^-126
4775     -669,                     // 33^-120
4776     -639,                     // 33^-114
4777     -608,                     // 33^-108
4778     -578,                     // 33^-102
4779     -548,                     // 33^-96
4780     -517,                     // 33^-90
4781     -487,                     // 33^-84
4782     -457,                     // 33^-78
4783     -427,                     // 33^-72
4784     -396,                     // 33^-66
4785     -366,                     // 33^-60
4786     -336,                     // 33^-54
4787     -306,                     // 33^-48
4788     -275,                     // 33^-42
4789     -245,                     // 33^-36
4790     -215,                     // 33^-30
4791     -185,                     // 33^-24
4792     -154,                     // 33^-18
4793     -124,                     // 33^-12
4794     -94,                      // 33^-6
4795     -63,                      // 33^0
4796     -33,                      // 33^6
4797     -3,                       // 33^12
4798     27,                       // 33^18
4799     58,                       // 33^24
4800     88,                       // 33^30
4801     118,                      // 33^36
4802     148,                      // 33^42
4803     179,                      // 33^48
4804     209,                      // 33^54
4805     239,                      // 33^60
4806     269,                      // 33^66
4807     300,                      // 33^72
4808     330,                      // 33^78
4809     360,                      // 33^84
4810     390,                      // 33^90
4811     421,                      // 33^96
4812     451,                      // 33^102
4813     481,                      // 33^108
4814     512,                      // 33^114
4815     542,                      // 33^120
4816     572,                      // 33^126
4817     602,                      // 33^132
4818     633,                      // 33^138
4819     663,                      // 33^144
4820     693,                      // 33^150
4821     723,                      // 33^156
4822     754,                      // 33^162
4823     784,                      // 33^168
4824     814,                      // 33^174
4825     844,                      // 33^180
4826     875,                      // 33^186
4827     905,                      // 33^192
4828     935,                      // 33^198
4829 ];
4830 const BASE33_SMALL_INT_POWERS: [u64; 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: [u64; 6] = [
4837     9223372036854775808,      // 34^0
4838     9799832789158199296,      // 34^1
4839     10412322338480586752,     // 34^2
4840     11063092484635623424,     // 34^3
4841     11754535764925349888,     // 34^4
4842     12489194250233184256,     // 34^5
4843 ];
4844 const BASE34_SMALL_EXPONENT: [i32; 6] = [
4845     -63,                      // 34^0
4846     -58,                      // 34^1
4847     -53,                      // 34^2
4848     -48,                      // 34^3
4849     -43,                      // 34^4
4850     -38,                      // 34^5
4851 ];
4852 const BASE34_LARGE_MANTISSA: [u64; 72] = [
4853     9604872659818954289,      // 34^-228
4854     13818638119852157632,     // 34^-222
4855     9940514895438007254,      // 34^-216
4856     14301530372152488549,     // 34^-210
4857     10287886147601198282,     // 34^-204
4858     14801297292224652053,     // 34^-198
4859     10647396286743453217,     // 34^-192
4860     15318528565264575918,     // 34^-186
4861     11019469506220361724,     // 34^-180
4862     15853834483014935870,     // 34^-174
4863     11404544822822581011,     // 34^-168
4864     16407846663860846991,     // 34^-162
4865     11803076594780713339,     // 34^-156
4866     16981218798089296108,     // 34^-150
4867     12215535057871861844,     // 34^-144
4868     17574627419191661979,     // 34^-138
4869     12642406880260427750,     // 34^-132
4870     18188772702119398880,     // 34^-126
4871     13084195736727816960,     // 34^-120
4872     9412189644717380884,      // 34^-114
4873     13541422902968601381,     // 34^-108
4874     9741098573165682574,      // 34^-102
4875     14014627870654357169,     // 34^-96
4876     10081501222766715924,     // 34^-90
4877     14504368983990906269,     // 34^-84
4878     10433799241558921201,     // 34^-78
4879     15011224098520048145,     // 34^-72
4880     10798408313169791102,     // 34^-66
4881     15535791262943115320,     // 34^-60
4882     11175758647289472494,     // 34^-54
4883     16078689424770850259,     // 34^-48
4884     11566295487283966163,     // 34^-42
4885     16640559160632214299,     // 34^-36
4886     11970479635546867736,     // 34^-30
4887     17222063432103834911,     // 34^-24
4888     12388787997209523031,     // 34^-18
4889     17823888367951909878,     // 34^-12
4890     12821714142851132552,     // 34^-6
4891     9223372036854775808,      // 34^0
4892     13269768890872758272,     // 34^6
4893     9545682734772404224,      // 34^12
4894     13733480910222387686,     // 34^18
4895     9879256578703990224,      // 34^24
4896     14213397344182222761,     // 34^30
4897     10224487159240697338,     // 34^36
4898     14710084455954213119,     // 34^42
4899     10581781820995279550,     // 34^48
4900     15224128296805573036,     // 34^54
4901     10951562143236309252,     // 34^60
4902     15756135397562640779,     // 34^66
4903     11334264437318166304,     // 34^72
4904     16306733484268988021,     // 34^78
4905     11730340261493716029,     // 34^84
4906     16876572218852198941,     // 34^90
4907     12140256953717114113,     // 34^96
4908     17466323965673246884,     // 34^102
4909     12564498183065403345,     // 34^108
4910     18076684584862935827,     // 34^114
4911     13003564520429535778,     // 34^120
4912     9354187126690740272,      // 34^126
4913     13457974029148190318,     // 34^132
4914     9681069157385005207,      // 34^138
4915     13928262876281286641,     // 34^144
4916     10019374079298318020,     // 34^150
4917     14414985965244449544,     // 34^156
4918     10369501065317377529,     // 34^162
4919     14918717590550882042,     // 34^168
4920     10731863237423767546,     // 34^174
4921     15440052115433190547,     // 34^180
4922     11106888154145020298,     // 34^186
4923     15979604673144701925,     // 34^192
4924     11495018315039655259,     // 34^198
4925 ];
4926 const BASE34_LARGE_EXPONENT: [i32; 72] = [
4927     -1223,                    // 34^-228
4928     -1193,                    // 34^-222
4929     -1162,                    // 34^-216
4930     -1132,                    // 34^-210
4931     -1101,                    // 34^-204
4932     -1071,                    // 34^-198
4933     -1040,                    // 34^-192
4934     -1010,                    // 34^-186
4935     -979,                     // 34^-180
4936     -949,                     // 34^-174
4937     -918,                     // 34^-168
4938     -888,                     // 34^-162
4939     -857,                     // 34^-156
4940     -827,                     // 34^-150
4941     -796,                     // 34^-144
4942     -766,                     // 34^-138
4943     -735,                     // 34^-132
4944     -705,                     // 34^-126
4945     -674,                     // 34^-120
4946     -643,                     // 34^-114
4947     -613,                     // 34^-108
4948     -582,                     // 34^-102
4949     -552,                     // 34^-96
4950     -521,                     // 34^-90
4951     -491,                     // 34^-84
4952     -460,                     // 34^-78
4953     -430,                     // 34^-72
4954     -399,                     // 34^-66
4955     -369,                     // 34^-60
4956     -338,                     // 34^-54
4957     -308,                     // 34^-48
4958     -277,                     // 34^-42
4959     -247,                     // 34^-36
4960     -216,                     // 34^-30
4961     -186,                     // 34^-24
4962     -155,                     // 34^-18
4963     -125,                     // 34^-12
4964     -94,                      // 34^-6
4965     -63,                      // 34^0
4966     -33,                      // 34^6
4967     -2,                       // 34^12
4968     28,                       // 34^18
4969     59,                       // 34^24
4970     89,                       // 34^30
4971     120,                      // 34^36
4972     150,                      // 34^42
4973     181,                      // 34^48
4974     211,                      // 34^54
4975     242,                      // 34^60
4976     272,                      // 34^66
4977     303,                      // 34^72
4978     333,                      // 34^78
4979     364,                      // 34^84
4980     394,                      // 34^90
4981     425,                      // 34^96
4982     455,                      // 34^102
4983     486,                      // 34^108
4984     516,                      // 34^114
4985     547,                      // 34^120
4986     578,                      // 34^126
4987     608,                      // 34^132
4988     639,                      // 34^138
4989     669,                      // 34^144
4990     700,                      // 34^150
4991     730,                      // 34^156
4992     761,                      // 34^162
4993     791,                      // 34^168
4994     822,                      // 34^174
4995     852,                      // 34^180
4996     883,                      // 34^186
4997     913,                      // 34^192
4998     944,                      // 34^198
4999 ];
5000 const BASE34_SMALL_INT_POWERS: [u64; 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: [u64; 6] = [
5007     9223372036854775808,      // 35^0
5008     10088063165309911040,     // 35^1
5009     11033819087057715200,     // 35^2
5010     12068239626469376000,     // 35^3
5011     13199637091450880000,     // 35^4
5012     14437103068774400000,     // 35^5
5013 ];
5014 const BASE35_SMALL_EXPONENT: [i32; 6] = [
5015     -63,                      // 35^0
5016     -58,                      // 35^1
5017     -53,                      // 35^2
5018     -48,                      // 35^3
5019     -43,                      // 35^4
5020     -38,                      // 35^5
5021 ];
5022 const BASE35_LARGE_MANTISSA: [u64; 71] = [
5023     11348773864264802781,     // 35^-222
5024     9714654125541636184,      // 35^-216
5025     16631665395337738380,     // 35^-210
5026     14236857547774631404,     // 35^-204
5027     12186880148060573338,     // 35^-198
5028     10432080762542161338,     // 35^-192
5029     17859912908640730010,     // 35^-186
5030     15288248642090717076,     // 35^-180
5031     13086880531724678972,     // 35^-174
5032     11202489314578100722,     // 35^-168
5033     9589433214356533221,      // 35^-162
5034     16417284907013989533,     // 35^-156
5035     14053345890899718904,     // 35^-150
5036     12029792492965214691,     // 35^-144
5037     10297612294415481616,     // 35^-138
5038     17629700433836653197,     // 35^-132
5039     15091184660126225295,     // 35^-126
5040     12918191962520288360,     // 35^-120
5041     11058090357972464737,     // 35^-114
5042     9465826388078148767,      // 35^-108
5043     16205667761547463659,     // 35^-102
5044     13872199680760223069,     // 35^-96
5045     11874729681889289960,     // 35^-90
5046     10164877111271147984,     // 35^-84
5047     17402455374597619654,     // 35^-78
5048     14896660812999728329,     // 35^-72
5049     12751677771947325078,     // 35^-66
5050     10915552689343391453,     // 35^-60
5051     9343812841314943660,      // 35^-54
5052     15996778339727633381,     // 35^-48
5053     13693388426986467236,     // 35^-42
5054     11721665614797754707,     // 35^-36
5055     10033852871240677221,     // 35^-30
5056     17178139481236495112,     // 35^-24
5057     14704644358629538426,     // 35^-18
5058     12587309932484688516,     // 35^-12
5059     10774852316876721446,     // 35^-6
5060     9223372036854775808,      // 35^0
5061     15790581481472000000,     // 35^6
5062     13516882032226562500,     // 35^12
5063     11570574528082381959,     // 35^18
5064     9904517520440015906,      // 35^24
5065     16956714997100751955,     // 35^30
5066     14515102976976096155,     // 35^36
5067     12425060777883196253,     // 35^42
5068     10635965558010358334,     // 35^48
5069     18208967404416189641,     // 35^54
5070     15587042479907979542,     // 35^60
5071     13342650787080448100,     // 35^66
5072     11421430990225254489,     // 35^72
5073     9776849289257450184,      // 35^78
5074     16738144652217302890,     // 35^84
5075     14328004764601889967,     // 35^90
5076     12264902998508825496,     // 35^96
5077     10498869035448040891,     // 35^102
5078     17974255652391389054,     // 35^108
5079     15386127075531072702,     // 35^114
5080     13170665365099231511,     // 35^120
5081     11274209897518154234,     // 35^126
5082     9650826688689364000,      // 35^132
5083     16522391657019252092,     // 35^138
5084     14143318229301497845,     // 35^144
5085     12106809636745979660,     // 35^150
5086     10363539673224497244,     // 35^156
5087     17742569311160898016,     // 35^162
5088     15187801450438335382,     // 35^168
5089     13000896817848986534,     // 35^174
5090     11128886469837128365,     // 35^180
5091     9526428506723229038,      // 35^186
5092     16309419696153507876,     // 35^192
5093     13961012284800847178,     // 35^198
5094 ];
5095 const BASE35_LARGE_EXPONENT: [i32; 71] = [
5096     -1202,                    // 35^-222
5097     -1171,                    // 35^-216
5098     -1141,                    // 35^-210
5099     -1110,                    // 35^-204
5100     -1079,                    // 35^-198
5101     -1048,                    // 35^-192
5102     -1018,                    // 35^-186
5103     -987,                     // 35^-180
5104     -956,                     // 35^-174
5105     -925,                     // 35^-168
5106     -894,                     // 35^-162
5107     -864,                     // 35^-156
5108     -833,                     // 35^-150
5109     -802,                     // 35^-144
5110     -771,                     // 35^-138
5111     -741,                     // 35^-132
5112     -710,                     // 35^-126
5113     -679,                     // 35^-120
5114     -648,                     // 35^-114
5115     -617,                     // 35^-108
5116     -587,                     // 35^-102
5117     -556,                     // 35^-96
5118     -525,                     // 35^-90
5119     -494,                     // 35^-84
5120     -464,                     // 35^-78
5121     -433,                     // 35^-72
5122     -402,                     // 35^-66
5123     -371,                     // 35^-60
5124     -340,                     // 35^-54
5125     -310,                     // 35^-48
5126     -279,                     // 35^-42
5127     -248,                     // 35^-36
5128     -217,                     // 35^-30
5129     -187,                     // 35^-24
5130     -156,                     // 35^-18
5131     -125,                     // 35^-12
5132     -94,                      // 35^-6
5133     -63,                      // 35^0
5134     -33,                      // 35^6
5135     -2,                       // 35^12
5136     29,                       // 35^18
5137     60,                       // 35^24
5138     90,                       // 35^30
5139     121,                      // 35^36
5140     152,                      // 35^42
5141     183,                      // 35^48
5142     213,                      // 35^54
5143     244,                      // 35^60
5144     275,                      // 35^66
5145     306,                      // 35^72
5146     337,                      // 35^78
5147     367,                      // 35^84
5148     398,                      // 35^90
5149     429,                      // 35^96
5150     460,                      // 35^102
5151     490,                      // 35^108
5152     521,                      // 35^114
5153     552,                      // 35^120
5154     583,                      // 35^126
5155     614,                      // 35^132
5156     644,                      // 35^138
5157     675,                      // 35^144
5158     706,                      // 35^150
5159     737,                      // 35^156
5160     767,                      // 35^162
5161     798,                      // 35^168
5162     829,                      // 35^174
5163     860,                      // 35^180
5164     891,                      // 35^186
5165     921,                      // 35^192
5166     952,                      // 35^198
5167 ];
5168 const BASE35_SMALL_INT_POWERS: [u64; 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: [u64; 6] = [
5175     9223372036854775808,      // 36^0
5176     10376293541461622784,     // 36^1
5177     11673330234144325632,     // 36^2
5178     13132496513412366336,     // 36^3
5179     14774058577588912128,     // 36^4
5180     16620815899787526144,     // 36^5
5181 ];
5182 const BASE36_SMALL_EXPONENT: [i32; 6] = [
5183     -63,                      // 36^0
5184     -58,                      // 36^1
5185     -53,                      // 36^2
5186     -48,                      // 36^3
5187     -43,                      // 36^4
5188     -38,                      // 36^5
5189 ];
5190 const BASE36_LARGE_MANTISSA: [u64; 71] = [
5191     11172994339528645078,     // 36^-222
5192     11325430459582219446,     // 36^-216
5193     11479946305982273645,     // 36^-210
5194     11636570252986002899,     // 36^-204
5195     11795331061968106016,     // 36^-198
5196     11956257886702331980,     // 36^-192
5197     12119380278715084095,     // 36^-186
5198     12284728192712064755,     // 36^-180
5199     12452331992078957377,     // 36^-174
5200     12622222454457155586,     // 36^-168
5201     12794430777395563548,     // 36^-162
5202     12968988584079505325,     // 36^-156
5203     13145927929137795237,     // 36^-150
5204     13325281304529035642,     // 36^-144
5205     13507081645508223020,     // 36^-138
5206     13691362336674758052,     // 36^-132
5207     13878157218102970303,     // 36^-126
5208     14067500591556283265,     // 36^-120
5209     14259427226786160917,     // 36^-114
5210     14453972367916992462,     // 36^-108
5211     14651171739918087751,     // 36^-102
5212     14851061555163971849,     // 36^-96
5213     15053678520084183432,     // 36^-90
5214     15259059841903798156,     // 36^-84
5215     15467243235475914756,     // 36^-78
5216     15678266930207358578,     // 36^-72
5217     15892169677078874302,     // 36^-66
5218     16108990755761097026,     // 36^-60
5219     16328769981827608423,     // 36^-54
5220     16551547714066402526,     // 36^-48
5221     16777364861891103792,     // 36^-42
5222     17006262892853298360,     // 36^-36
5223     17238283840257358043,     // 36^-30
5224     17473470310879155380,     // 36^-24
5225     17711865492790087155,     // 36^-18
5226     17953513163287843146,     // 36^-12
5227     18198457696935376453,     // 36^-6
5228     9223372036854775808,      // 36^0
5229     9349208943630483456,      // 36^6
5230     9476762676643233792,      // 36^12
5231     9606056659007943744,      // 36^18
5232     9737114633407288801,      // 36^24
5233     9869960666451650558,      // 36^30
5234     10004619153098548172,     // 36^36
5235     10141114821132365302,     // 36^42
5236     10279472735705195138,     // 36^48
5237     10419718303939637392,     // 36^54
5238     10561877279594392463,     // 36^60
5239     10705975767793509530,     // 36^66
5240     10852040229820157048,     // 36^72
5241     11000097487975795902,     // 36^78
5242     11150174730505647564,     // 36^84
5243     11302299516591361707,     // 36^90
5244     11456499781411800112,     // 36^96
5245     11612803841272866179,     // 36^102
5246     11771240398807322073,     // 36^108
5247     11931838548245548344,     // 36^114
5248     12094627780758213915,     // 36^120
5249     12259637989871837542,     // 36^126
5250     12426899476958235198,     // 36^132
5251     12596442956798861450,     // 36^138
5252     12768299563225066619,     // 36^144
5253     12942500854835305460,     // 36^150
5254     13119078820790347231,     // 36^156
5255     13298065886687551351,     // 36^162
5256     13479494920515287357,     // 36^168
5257     13663399238688592583,     // 36^174
5258     13849812612167175924,     // 36^180
5259     14038769272656891137,     // 36^186
5260     14230303918895818486,     // 36^192
5261     14424451723026109070,     // 36^198
5262 ];
5263 const BASE36_LARGE_EXPONENT: [i32; 71] = [
5264     -1211,                    // 36^-222
5265     -1180,                    // 36^-216
5266     -1149,                    // 36^-210
5267     -1118,                    // 36^-204
5268     -1087,                    // 36^-198
5269     -1056,                    // 36^-192
5270     -1025,                    // 36^-186
5271     -994,                     // 36^-180
5272     -963,                     // 36^-174
5273     -932,                     // 36^-168
5274     -901,                     // 36^-162
5275     -870,                     // 36^-156
5276     -839,                     // 36^-150
5277     -808,                     // 36^-144
5278     -777,                     // 36^-138
5279     -746,                     // 36^-132
5280     -715,                     // 36^-126
5281     -684,                     // 36^-120
5282     -653,                     // 36^-114
5283     -622,                     // 36^-108
5284     -591,                     // 36^-102
5285     -560,                     // 36^-96
5286     -529,                     // 36^-90
5287     -498,                     // 36^-84
5288     -467,                     // 36^-78
5289     -436,                     // 36^-72
5290     -405,                     // 36^-66
5291     -374,                     // 36^-60
5292     -343,                     // 36^-54
5293     -312,                     // 36^-48
5294     -281,                     // 36^-42
5295     -250,                     // 36^-36
5296     -219,                     // 36^-30
5297     -188,                     // 36^-24
5298     -157,                     // 36^-18
5299     -126,                     // 36^-12
5300     -95,                      // 36^-6
5301     -63,                      // 36^0
5302     -32,                      // 36^6
5303     -1,                       // 36^12
5304     30,                       // 36^18
5305     61,                       // 36^24
5306     92,                       // 36^30
5307     123,                      // 36^36
5308     154,                      // 36^42
5309     185,                      // 36^48
5310     216,                      // 36^54
5311     247,                      // 36^60
5312     278,                      // 36^66
5313     309,                      // 36^72
5314     340,                      // 36^78
5315     371,                      // 36^84
5316     402,                      // 36^90
5317     433,                      // 36^96
5318     464,                      // 36^102
5319     495,                      // 36^108
5320     526,                      // 36^114
5321     557,                      // 36^120
5322     588,                      // 36^126
5323     619,                      // 36^132
5324     650,                      // 36^138
5325     681,                      // 36^144
5326     712,                      // 36^150
5327     743,                      // 36^156
5328     774,                      // 36^162
5329     805,                      // 36^168
5330     836,                      // 36^174
5331     867,                      // 36^180
5332     898,                      // 36^186
5333     929,                      // 36^192
5334     960,                      // 36^198
5335 ];
5336 const BASE36_SMALL_INT_POWERS: [u64; 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<u64> = 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<u64> = 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<u64> = 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<u64> = 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<u64> = 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<u64> = 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<u64> = 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<u64> = 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<u64> = 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<u64> = 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<u64> = 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<u64> = 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<u64> = 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<u64> = 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<u64> = 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<u64> = 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<u64> = 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<u64> = 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<u64> = 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<u64> = 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<u64> = 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<u64> = 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<u64> = 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<u64> = 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<u64> = 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<u64> = 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<u64> = 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<u64> = 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<u64> = 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<u64> = 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 base.
5590 pub(crate) fn get_powers(radix: u32)
5591     -> &'static ModeratePathPowers<u64>
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]
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]
5664     fn pow2_test() {
5665         for base in BASE_POW2.iter().cloned() {
5666             let _ = get_powers(base);
5667         }
5668     }
5669 }
5670