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