[PATCH] mini-gmp: avoid a mpz_sizeinbase call in mpz_get_str

David Sparks sparks05 at proton.me
Thu Oct 15 07:22:49 CEST 2026


If you want to do these tests yourself, it helps
to know that m = log_5 2 = 0x1b903469050f72.e50cf5488da3c347p-54.
That's 53 bits (IEEE double) before the hexadecimal point, so
using
  double const m1 = 0x1b903469050f72p-54;
  double const m2 = 0x1b903469050f73p-54;
If (k-1)*m1 and (k-1)*m2 straddle an integer, then higher
precision is needed to figure out the base-5 length of
2^(k-1).

This happens at the following places:
k=241187131  n=103873643.99999999925307
k=343910774  n=148114308.99999999478878
k=379650618  n=163506622.00000000297042
k=446634417  n=192354973.99999999032450
k=482374261  n=207747286.99999999850614
k=518114105  n=223139600.00000000668777
k=549358060  n=236595638.99999998586022
k=585097904  n=251987951.99999999404185
k=620837748  n=267380265.00000000222349
k=652081703  n=280836303.99999998139594
k=687821547  n=296228616.99999998957757
k=719065502  n=309684655.99999996875002
k=723561391  n=311620929.99999999775920
k=754805346  n=325076968.99999997693165
k=759301235  n=327013243.00000000594084
k=790545190  n=340469281.99999998511329
k=826285034  n=355861594.99999999329492
k=857528989  n=369317633.99999997246737
k=862024878  n=371253908.00000000147655
k=893268833  n=384709946.99999998064900
k=897764722  n=386646221.00000000965819
k=929008677  n=400102259.99999998883064
k=960252632  n=413558298.99999996800309
k=964748521  n=415494572.99999999701227
k=995992476  n=428950611.99999997618472
k=1000488365  n=430886886.00000000519390
k=1031732320  n=444342924.99999998436635
k=1036228209  n=446279199.00000001337554
k=1067472164  n=459735237.99999999254799
k=1071968053  n=461671512.00000002155717
k=1098716119  n=473191276.99999997172044
k=1103212008  n=475127551.00000000072962
k=1134455963  n=488583589.99999997990207
k=1138951852  n=490519864.00000000891125
k=1170195807  n=503975902.99999998808370
k=1174691696  n=505912177.00000001709289
k=1201439762  n=517431941.99999996725615
k=1205935651  n=519368215.99999999626534
k=1210431540  n=521304490.00000002527452
k=1237179606  n=532824254.99999997543779
k=1241675495  n=534760529.00000000444697
k=1268423561  n=546280293.99999995461024
k=1272919450  n=548216567.99999998361942
k=1299667516  n=559736332.99999993378269
k=1304163405  n=561672606.99999996279187
k=1308659294  n=563608880.99999999180105
k=1335407360  n=575128645.99999994196432
k=1339903249  n=577064919.99999997097350
k=1344399138  n=579001193.99999999998269
k=1371147204  n=590520958.99999995014595
k=1375643093  n=592457232.99999997915514
k=1380138982  n=594393507.00000000816432
k=1406887048  n=605913271.99999995832759
k=1411382937  n=607849545.99999998733677
k=1438131003  n=619369310.99999993750004
k=1442626892  n=621305584.99999996650922
k=1447122781  n=623241858.99999999551841
k=1473870847  n=634761623.99999994568167
k=1478366736  n=636697897.99999997469086
k=1482862625  n=638634172.00000000370004
k=1509610691  n=650153936.99999995386330
k=1514106580  n=652090210.99999998287249
k=1518602469  n=654026485.00000001188167
k=1540854646  n=663609975.99999993303575
k=1545350535  n=665546249.99999996204494
k=1549846424  n=667482523.99999999105412
k=1576594490  n=679002288.99999994121739
k=1581090379  n=680938562.99999997022657
k=1585586268  n=682874836.99999999923576
k=1612334334  n=694394601.99999994939902
k=1616830223  n=696330875.99999997840821
k=1621326112  n=698267150.00000000741739
k=1648074178  n=709786914.99999995758066
k=1652570067  n=711723188.99999998658984
k=1657065956  n=713659463.00000001559902
k=1679318133  n=723242953.99999993675310
k=1683814022  n=725179227.99999996576229
k=1688309911  n=727115501.99999999477147
k=1692805800  n=729051776.00000002378066
k=1715057977  n=738635266.99999994493474
k=1719553866  n=740571540.99999997394392
k=1724049755  n=742507815.00000000295311
k=1750797821  n=754027579.99999995311637
k=1755293710  n=755963853.99999998212556
k=1759789599  n=757900128.00000001113474
k=1782041776  n=767483618.99999993228882
k=1786537665  n=769419892.99999996129801
k=1791033554  n=771356166.99999999030719
k=1795529443  n=773292441.00000001931637
k=1817781620  n=782875931.99999994047046
k=1822277509  n=784812205.99999996947964
k=1826773398  n=786748479.99999999848882
k=1831269287  n=788684754.00000002749801
k=1853521464  n=798268244.99999994865209
k=1858017353  n=800204518.99999997766127
k=1862513242  n=802140793.00000000667046
k=1889261308  n=813660557.99999995683372
k=1893757197  n=815596831.99999998584291
k=1898253086  n=817533106.00000001485209
k=1920505263  n=827116596.99999993600617
k=1925001152  n=829052870.99999996501536
k=1929497041  n=830989144.99999999402454
k=1933992930  n=832925419.00000002303372
k=1956245107  n=842508909.99999994418781
k=1960740996  n=844445183.99999997319699
k=1965236885  n=846381458.00000000220617
k=1969732774  n=848317732.00000003121536
k=1991984951  n=857901222.99999995236944
k=1996480840  n=859837496.99999998137862
k=2000976729  n=861773771.00000001038781
k=2005472618  n=863710045.00000003939699
k=2023228906  n=871357261.99999993154189
k=2027724795  n=873293535.99999996055107
k=2032220684  n=875229809.99999998956026
k=2036716573  n=877166084.00000001856944
k=2058968750  n=886749574.99999993972352
k=2063464639  n=888685848.99999996873271
k=2067960528  n=890622122.99999999774189
k=2072456417  n=892558397.00000002675108
k=2094708594  n=902141887.99999994790516
k=2099204483  n=904078161.99999997691434
k=2103700372  n=906014436.00000000592352
k=2108196261  n=907950710.00000003493271
k=2130448438  n=917534200.99999995608679
k=2134944327  n=919470474.99999998509597
k=2139440216  n=921406749.00000001410516
k=2143936105  n=923343023.00000004311434
k=2161692393  n=930990239.99999993525924
k=2166188282  n=932926513.99999996426842
k=2170684171  n=934862787.99999999327761
k=2175180060  n=936799062.00000002228679
k=2197432237  n=946382552.99999994344087
k=2201928126  n=948318826.99999997245006
k=2206424015  n=950255101.00000000145924
k=2210919904  n=952191375.00000003046843
k=2233172081  n=961774865.99999995162251
k=2237667970  n=963711139.99999998063169
k=2242163859  n=965647414.00000000964088
k=2246659748  n=967583688.00000003865006
k=2264416036  n=975230904.99999993079496
k=2268911925  n=977167178.99999995980414
k=2273407814  n=979103452.99999998881333
k=2277903703  n=981039727.00000001782251
k=2282399592  n=982976001.00000004683169
k=2300155880  n=990623217.99999993897659
k=2304651769  n=992559491.99999996798577
k=2309147658  n=994495765.99999999699496
k=2313643547  n=996432040.00000002600414
k=2318139436  n=998368314.00000005501333
k=2335895724  n=1006015530.99999994715822
k=2340391613  n=1007951804.99999997616741
k=2344887502  n=1009888079.00000000517659
k=2349383391  n=1011824353.00000003418578
k=2371635568  n=1021407843.99999995533986
k=2376131457  n=1023344117.99999998434904
k=2380627346  n=1025280392.00000001335823
k=2385123235  n=1027216666.00000004236741
k=2402879523  n=1034863882.99999993451231
k=2407375412  n=1036800156.99999996352149
k=2411871301  n=1038736430.99999999253068
k=2416367190  n=1040672705.00000002153986
k=2420863079  n=1042608979.00000005054904
k=2438619367  n=1050256195.99999994269394
k=2443115256  n=1052192469.99999997170313
k=2447611145  n=1054128744.00000000071231
k=2452107034  n=1056065018.00000002972149
k=2456602923  n=1058001292.00000005873068
k=2474359211  n=1065648508.99999995087557
k=2478855100  n=1067584782.99999997988476
k=2483350989  n=1069521057.00000000889394
k=2487846878  n=1071457331.00000003790313
k=2496611388  n=1075231999.99999987202966
k=2501107277  n=1077168273.99999990103884
k=2505603166  n=1079104547.99999993004802
k=2510099055  n=1081040821.99999995905721
k=2514594944  n=1082977095.99999998806639
k=2532351232  n=1090624312.99999988021129
k=2536847121  n=1092560586.99999990922047
k=2541343010  n=1094496860.99999993822966
k=2545838899  n=1096433134.99999996723884
k=2550334788  n=1098369408.99999999624803
k=2568091076  n=1106016625.99999988839292
k=2572586965  n=1107952899.99999991740211
k=2577082854  n=1109889173.99999994641129
k=2581578743  n=1111825447.99999997542048
k=2586074632  n=1113761722.00000000442966
k=2599335031  n=1119472664.99999986756537
k=2603830920  n=1121408938.99999989657456
k=2608326809  n=1123345212.99999992558374
k=2612822698  n=1125281486.99999995459293
k=2617318587  n=1127217760.99999998360211
k=2635074875  n=1134864977.99999987574701
k=2639570764  n=1136801251.99999990475619
k=2644066653  n=1138737525.99999993376538
k=2648562542  n=1140673799.99999996277456
k=2653058431  n=1142610073.99999999178374




More information about the gmp-devel mailing list