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