using Polylogarithms
setprecision(200)
H_BigFloat(n) = harmonic(big(n))
function f(x, H=H_BigFloat)
maxint = round(BigInt, exp(big(precision(BigFloat))))
a, b = one(BigInt), maxint
@assert H(a) < x
@assert H(b) ≥ x
maxiters = 2floor(Int, log2(maxint))
for _ in 1:maxiters
a + 1 == b && break
c = a + (b - a) ÷ 2
if H(a) < x ≤ H(c)
b = c
else
a = c
end
end
(x = x, n = b, harmonic_num = H(b))
end
ENV["LINES"] = 256
result1 = [f(n) for n in 2:100]
99-element Vector{NamedTuple{(:x, :n, :harmonic_num), Tuple{Int64, BigInt, BigFloat}}}: (x = 2, n = 4, harmonic_num = 2.083333333333333333333333333333333333333333333333333333333335) (x = 3, n = 11, harmonic_num = 3.019877344877344877344877344877344877344877344877344877344878) (x = 4, n = 31, harmonic_num = 4.0272451954365201027598381802534095707393209246497123681072407) (x = 5, n = 83, harmonic_num = 5.0020682726801660537283247507538702643454552155664385874789896) (x = 6, n = 227, harmonic_num = 6.0043667083455660233764362171574084746508937713055123369847715) (x = 7, n = 616, harmonic_num = 7.0012740971341603814870689330229450748640483096748525357211127) (x = 8, n = 1674, harmonic_num = 8.0004855719957790677903047965196974458003419278834083891726504) (x = 9, n = 4550, harmonic_num = 9.0002080629311403391641795012689286242687992754000959959325923) (x = 10, n = 12367, harmonic_num = 10.00004300827580769470675707492981720768686887243344211163999) (x = 11, n = 33617, harmonic_num = 11.000017708636426588775502323236313183966679905444518633016216) (x = 12, n = 91380, harmonic_num = 12.000003051665633364493692419248057022030778910565809482688165) (x = 13, n = 248397, harmonic_num = 13.000001229480784046735002778393295851586244616984799677492552) (x = 14, n = 675214, harmonic_num = 14.000001362053405019485544740634371711744827716696191339553731) (x = 15, n = 1835421, harmonic_num = 15.000000378267764038722417376341073290376274995404759276559113) (x = 16, n = 4989191, harmonic_num = 16.000000095453825683212523123947313912417297006111031348459803) (x = 17, n = 13562027, harmonic_num = 17.000000014849926143905216646186219418171957511486599137709735) (x = 18, n = 36865412, harmonic_num = 18.00000000371993108299370448149019553857332058600235525572544) (x = 19, n = 100210581, harmonic_num = 19.000000009733298615419485658584101672422323388158597606176986) (x = 20, n = 272400600, harmonic_num = 20.000000001617442189558145332972303088780667632148753034948758) (x = 21, n = 740461601, harmonic_num = 21.000000000401333332925173781633533878538319737542199796899211) (x = 22, n = 2012783315, harmonic_num = 22.000000000138447155300490464838828326598459651902733424888296) (x = 23, n = 5471312310, harmonic_num = 23.000000000019792015918807098385469565253027954144985006850075) (x = 24, n = 14872568831, harmonic_num = 24.000000000022722011346816737014917338766309293609923421366555) (x = 25, n = 40427833596, harmonic_num = 25.000000000006079372307973250888580040089991202648311660148238) (x = 26, n = 109894245429, harmonic_num = 26.000000000007607761796698370456733451841382707885203558835405) (x = 27, n = 298723530401, harmonic_num = 27.000000000001822027805141219419280916603346623132042858606686) (x = 28, n = 812014744422, harmonic_num = 28.00000000000055283008442102146817252091967211511130733567353) (x = 29, n = 2207284924203, harmonic_num = 29.000000000000100870399238977372553622974781842169673781174027) (x = 30, n = 6000022499693, harmonic_num = 30.000000000000021695440106033803459951054478437445383917286317) (x = 31, n = 16309752131262, harmonic_num = 31.000000000000036511100162187627477345641552419560977556327317) (x = 32, n = 44334502845080, harmonic_num = 32.00000000000000181005437127482703863694730016298358900271484) (x = 33, n = 120513673457548, harmonic_num = 33.000000000000004592807025524389292436396114417812548756630742) (x = 34, n = 327590128640500, harmonic_num = 34.000000000000002319920738411991933333199926419265825987869445) (x = 35, n = 890482293866031, harmonic_num = 35.000000000000000027142528822137794345678751088330077923852256) (x = 36, n = 2420581837980561, harmonic_num = 36.000000000000000255559725143373609272519266159776439018692331) (x = 37, n = 6579823624480555, harmonic_num = 37.000000000000000012056078612833951457032905489508751229016777) (x = 38, n = 17885814992891026, harmonic_num = 38.000000000000000004266424609177136780631405511423125498436986) (x = 39, n = 48618685882356024, harmonic_num = 39.000000000000000000723781312261942054800747275683198407853629) (x = 40, n = 132159290357566703, harmonic_num = 40.000000000000000002021860369122329611085322604033555305104605) (x = 41, n = 359246197441016284, harmonic_num = 41.000000000000000000715926501716393676610419354973486234999611) (x = 42, n = 976532410446924923, harmonic_num = 42.000000000000000000956545562036418177402798580611832991937885) (x = 43, n = 2654490306219185926, harmonic_num = 43.000000000000000000308248729549451129654012892933384790616002) (x = 44, n = 7215652763216299614, harmonic_num = 44.000000000000000000053485720904152029699938956338258138487968) (x = 45, n = 19614177786721165095, harmonic_num = 45.000000000000000000004159655998101921375891654419398874916989) (x = 46, n = 53316863057809197640, harmonic_num = 46.000000000000000000002481496461973309113772326437594148354582) (x = 47, n = 144930260000482107388, harmonic_num = 47.000000000000000000002648015713376646038398953008462522979795) (x = 48, n = 393961292153155329065, harmonic_num = 48.000000000000000000001244192072520476671471982228614828945239) (x = 49, n = 1070897821576167177938, harmonic_num = 49.000000000000000000000406545848026006324792519412270542080164) (x = 50, n = 2911002088526872100231, harmonic_num = 50.000000000000000000000056888803522598013043937137483789824171) (x = 51, n = 7912924079848925358601, harmonic_num = 51.000000000000000000000045839559969098228635176561768989143718) (x = 52, n = 21509557736229344884236, harmonic_num = 52.000000000000000000000014362529090522946440553394362849087065) (x = 53, n = 58469039932582905432687, harmonic_num = 53.000000000000000000000006949934270054286031296214489394553291) (x = 54, n = 158935328776186391138258, harmonic_num = 54.000000000000000000000000815465511844731994545562297258231647) (x = 55, n = 432031016112471451577157, harmonic_num = 55.000000000000000000000000889178325906142497938050057841596956) (x = 56, n = 1174382060429228130465262, harmonic_num = 56.000000000000000000000000652113208433585267276621080550473825) (x = 57, n = 3192301414533063196442769, harmonic_num = 57.000000000000000000000000304410495175111821283743301883407251) (x = 58, n = 8677574926089331546241281, harmonic_num = 58.000000000000000000000000109821427647979050668951305553713257) (x = 59, n = 23588094236680472471118021, harmonic_num = 59.000000000000000000000000022357226591183773550012795013110775) (x = 60, n = 64119087931548061631271999, harmonic_num = 60.000000000000000000000000004909370421128962095937957801567434) (x = 61, n = 174293751581694765651535160, harmonic_num = 61.00000000000000000000000000383249134428287436127675966947305) (x = 62, n = 473779537738475855129933156, harmonic_num = 62.000000000000000000000000001686070645103930634901414068208694) (x = 63, n = 1287866308130225372826504725, harmonic_num = 63.000000000000000000000000000320241760024952777885282943688834) (x = 64, n = 3500783582875029181027036603, harmonic_num = 64.000000000000000000000000000019905720308785483824411833504247) (x = 65, n = 9516116398696941841501814187, harmonic_num = 65.000000000000000000000000000088393426906645039021342695189073) (x = 66, n = 25867486284079027778882966608, harmonic_num = 66.000000000000000000000000000002900232014710743832137612271621) (x = 67, n = 70315117913925613256698835559, harmonic_num = 67.000000000000000000000000000003103423190246035150233629799412) (x = 68, n = 191136307291379082511624692911, harmonic_num = 68.000000000000000000000000000004871506654615416738301570595631) (x = 69, n = 519562350868919872217129342738, harmonic_num = 69.000000000000000000000000000000559325663241681390095219801501) (x = 70, n = 1412316897118447520274872345234, harmonic_num = 70.000000000000000000000000000000673771789834325489170710856841) (x = 71, n = 3839075357462738800375895709459, harmonic_num = 71.000000000000000000000000000000055487998355799997491992119251) (x = 72, n = 10435688782275876319204679565481, harmonic_num = 72.000000000000000000000000000000039511092957653362085670240322) (x = 73, n = 28367143184314416294476149278380, harmonic_num = 73.000000000000000000000000000000019564087923901679543705604662) (x = 74, n = 77109889843217734371244199191997, harmonic_num = 74.000000000000000000000000000000010290930609009669488957834992) (x = 75, n = 209606412355297463920369837672528, harmonic_num = 75.000000000000000000000000000000004430877215639277485943258706) (x = 76, n = 569769301833898600601889960891565, harmonic_num = 76.000000000000000000000000000000000345997376197854718026373927) (x = 77, n = 1548793539588883523672155998238746, harmonic_num = 77.000000000000000000000000000000000572189704633748017607606861) (x = 78, n = 4210057334699226968111701228131114, harmonic_num = 78.000000000000000000000000000000000179735220345244638467019028) (x = 79, n = 11444122349683629273152884131857777, harmonic_num = 79.000000000000000000000000000000000074125832798944744266475001) (x = 80, n = 31108349825807040839802780879983900, harmonic_num = 80.000000000000000000000000000000000007926291805625609876723438) (x = 81, n = 84561262044838384316747509193582008, harmonic_num = 81.000000000000000000000000000000000011553751573384930240677557) (x = 82, n = 229861342008047745722830730247403276, harmonic_num = 82.000000000000000000000000000000000001973328628507565939354441) (x = 83, n = 624827909045685970797051309751852406, harmonic_num = 83.000000000000000000000000000000000001023673572029210335564959) (x = 84, n = 1698458351072949270779716460863436733, harmonic_num = 84.000000000000000000000000000000000000334663416871626869699394) (x = 85, n = 4616888472116111518644282411211592430, harmonic_num = 85.000000000000000000000000000000000000005932654520985245335243) (x = 86, n = 12550004037775271302466974506994737925, harmonic_num = 86.000000000000000000000000000000000000007452890360905721858985) (x = 87, n = 34114447922972165086558975884968520121, harmonic_num = 87.000000000000000000000000000000000000006235156428247843262045) (x = 88, n = 92732683876927654880596338797778137601, harmonic_num = 88.000000000000000000000000000000000000007785496044190684699854) (x = 89, n = 252073569486889529428455928155758001446, harmonic_num = 89.000000000000000000000000000000000000001565078366164229879079) (x = 90, n = 685207003371020263122059958005466586972, harmonic_num = 90.000000000000000000000000000000000000000818409883889823632111) (x = 91, n = 1862585745996320133197441417245010973713, harmonic_num = 91.000000000000000000000000000000000000000108746809197877927934) (x = 92, n = 5063032987288631885090741933873056647850, harmonic_num = 92.000000000000000000000000000000000000000176135451467552981374) (x = 93, n = 13762750566235404213510357318770018360477, harmonic_num = 93.000000000000000000000000000000000000000025557128122724293981) (x = 94, n = 37411034773812134716702297182276574136287, harmonic_num = 94.00000000000000000000000000000000000000001139766584057352057) (x = 95, n = 101693736009502973349116272862661579593050, harmonic_num = 95.000000000000000000000000000000000000000007645738585014728452) (x = 96, n = 276432234662743192748020298015175353222438, harmonic_num = 96.000000000000000000000000000000000000000000992565070592590082) (x = 97, n = 751420720284061429699574124556466469559612, harmonic_num = 97.000000000000000000000000000000000000000001302724270272438891) (x = 98, n = 2042573289475771283785445559104869149699180, harmonic_num = 98.000000000000000000000000000000000000000000125995855726820449) (x = 99, n = 5552289856077806263406249735487322851932338, harmonic_num = 99.00000000000000000000000000000000000000000011441985638943799) (x = 100, n = 15092688622113788323693563264538101449859497, harmonic_num = 100.00000000000000000000000000000000000000000000900432120889788)
using SpecialFunctions
H_BigFloat2(n) = digamma(big(n+1)) + MathConstants.γ
result2 = [f(n, H_BigFloat2) for n in 2:100]
99-element Vector{NamedTuple{(:x, :n, :harmonic_num), Tuple{Int64, BigInt, BigFloat}}}: (x = 2, n = 4, harmonic_num = 2.083333333333333333333333333333333333333333333333333333333335) (x = 3, n = 11, harmonic_num = 3.019877344877344877344877344877344877344877344877344877344878) (x = 4, n = 31, harmonic_num = 4.0272451954365201027598381802534095707393209246497123681072407) (x = 5, n = 83, harmonic_num = 5.0020682726801660537283247507538702643454552155664385874789896) (x = 6, n = 227, harmonic_num = 6.0043667083455660233764362171574084746508937713055123369847715) (x = 7, n = 616, harmonic_num = 7.0012740971341603814870689330229450748640483096748525357211127) (x = 8, n = 1674, harmonic_num = 8.0004855719957790677903047965196974458003419278834083891726504) (x = 9, n = 4550, harmonic_num = 9.0002080629311403391641795012689286242687992754000959959325923) (x = 10, n = 12367, harmonic_num = 10.00004300827580769470675707492981720768686887243344211163999) (x = 11, n = 33617, harmonic_num = 11.000017708636426588775502323236313183966679905444518633016216) (x = 12, n = 91380, harmonic_num = 12.000003051665633364493692419248057022030778910565809482688165) (x = 13, n = 248397, harmonic_num = 13.000001229480784046735002778393295851586244616984799677492552) (x = 14, n = 675214, harmonic_num = 14.000001362053405019485544740634371711744827716696191339553731) (x = 15, n = 1835421, harmonic_num = 15.000000378267764038722417376341073290376274995404759276559113) (x = 16, n = 4989191, harmonic_num = 16.000000095453825683212523123947313912417297006111031348459803) (x = 17, n = 13562027, harmonic_num = 17.000000014849926143905216646186219418171957511486599137709735) (x = 18, n = 36865412, harmonic_num = 18.00000000371993108299370448149019553857332058600235525572544) (x = 19, n = 100210581, harmonic_num = 19.000000009733298615419485658584101672422323388158597606176986) (x = 20, n = 272400600, harmonic_num = 20.000000001617442189558145332972303088780667632148753034948758) (x = 21, n = 740461601, harmonic_num = 21.000000000401333332925173781633533878538319737542199796899211) (x = 22, n = 2012783315, harmonic_num = 22.000000000138447155300490464838828326598459651902733424888296) (x = 23, n = 5471312310, harmonic_num = 23.000000000019792015918807098385469565253027954144985006850075) (x = 24, n = 14872568831, harmonic_num = 24.000000000022722011346816737014917338766309293609923421366555) (x = 25, n = 40427833596, harmonic_num = 25.000000000006079372307973250888580040089991202648311660148238) (x = 26, n = 109894245429, harmonic_num = 26.000000000007607761796698370456733451841382707885203558835405) (x = 27, n = 298723530401, harmonic_num = 27.000000000001822027805141219419280916603346623132042858606686) (x = 28, n = 812014744422, harmonic_num = 28.00000000000055283008442102146817252091967211511130733567353) (x = 29, n = 2207284924203, harmonic_num = 29.000000000000100870399238977372553622974781842169673781174027) (x = 30, n = 6000022499693, harmonic_num = 30.000000000000021695440106033803459951054478437445383917286317) (x = 31, n = 16309752131262, harmonic_num = 31.000000000000036511100162187627477345641552419560977556327317) (x = 32, n = 44334502845080, harmonic_num = 32.00000000000000181005437127482703863694730016298358900271484) (x = 33, n = 120513673457548, harmonic_num = 33.000000000000004592807025524389292436396114417812548756630742) (x = 34, n = 327590128640500, harmonic_num = 34.000000000000002319920738411991933333199926419265825987869445) (x = 35, n = 890482293866031, harmonic_num = 35.000000000000000027142528822137794345678751088330077923852256) (x = 36, n = 2420581837980561, harmonic_num = 36.000000000000000255559725143373609272519266159776439018692331) (x = 37, n = 6579823624480555, harmonic_num = 37.000000000000000012056078612833951457032905489508751229016777) (x = 38, n = 17885814992891026, harmonic_num = 38.000000000000000004266424609177136780631405511423125498436986) (x = 39, n = 48618685882356024, harmonic_num = 39.000000000000000000723781312261942054800747275683198407853629) (x = 40, n = 132159290357566703, harmonic_num = 40.000000000000000002021860369122329611085322604033555305104605) (x = 41, n = 359246197441016284, harmonic_num = 41.000000000000000000715926501716393676610419354973486234999611) (x = 42, n = 976532410446924923, harmonic_num = 42.000000000000000000956545562036418177402798580611832991937885) (x = 43, n = 2654490306219185926, harmonic_num = 43.000000000000000000308248729549451129654012892933384790616002) (x = 44, n = 7215652763216299614, harmonic_num = 44.000000000000000000053485720904152029699938956338258138487968) (x = 45, n = 19614177786721165095, harmonic_num = 45.000000000000000000004159655998101921375891654419398874916989) (x = 46, n = 53316863057809197640, harmonic_num = 46.000000000000000000002481496461973309113772326437594148354582) (x = 47, n = 144930260000482107388, harmonic_num = 47.000000000000000000002648015713376646038398953008462522979795) (x = 48, n = 393961292153155329065, harmonic_num = 48.000000000000000000001244192072520476671471982228614828945239) (x = 49, n = 1070897821576167177938, harmonic_num = 49.000000000000000000000406545848026006324792519412270542080164) (x = 50, n = 2911002088526872100231, harmonic_num = 50.000000000000000000000056888803522598013043937137483789824171) (x = 51, n = 7912924079848925358601, harmonic_num = 51.000000000000000000000045839559969098228635176561768989143718) (x = 52, n = 21509557736229344884236, harmonic_num = 52.000000000000000000000014362529090522946440553394362849087065) (x = 53, n = 58469039932582905432687, harmonic_num = 53.000000000000000000000006949934270054286031296214489394553291) (x = 54, n = 158935328776186391138258, harmonic_num = 54.000000000000000000000000815465511844731994545562297258231647) (x = 55, n = 432031016112471451577157, harmonic_num = 55.000000000000000000000000889178325906142497938050057841596956) (x = 56, n = 1174382060429228130465262, harmonic_num = 56.000000000000000000000000652113208433585267276621080550473825) (x = 57, n = 3192301414533063196442769, harmonic_num = 57.000000000000000000000000304410495175111821283743301883407251) (x = 58, n = 8677574926089331546241281, harmonic_num = 58.000000000000000000000000109821427647979050668951305553713257) (x = 59, n = 23588094236680472471118021, harmonic_num = 59.000000000000000000000000022357226591183773550012795013110775) (x = 60, n = 64119087931548061631271999, harmonic_num = 60.000000000000000000000000004909370421128962095937957801567434) (x = 61, n = 174293751581694765651535160, harmonic_num = 61.00000000000000000000000000383249134428287436127675966947305) (x = 62, n = 473779537738475855129933156, harmonic_num = 62.000000000000000000000000001686070645103930634901414068208694) (x = 63, n = 1287866308130225372826504725, harmonic_num = 63.000000000000000000000000000320241760024952777885282943688834) (x = 64, n = 3500783582875029181027036603, harmonic_num = 64.000000000000000000000000000019905720308785483824411833504247) (x = 65, n = 9516116398696941841501814187, harmonic_num = 65.000000000000000000000000000088393426906645039021342695189073) (x = 66, n = 25867486284079027778882966608, harmonic_num = 66.000000000000000000000000000002900232014710743832137612271621) (x = 67, n = 70315117913925613256698835559, harmonic_num = 67.000000000000000000000000000003103423190246035150233629799412) (x = 68, n = 191136307291379082511624692911, harmonic_num = 68.000000000000000000000000000004871506654615416738301570595631) (x = 69, n = 519562350868919872217129342738, harmonic_num = 69.000000000000000000000000000000559325663241681390095219801501) (x = 70, n = 1412316897118447520274872345234, harmonic_num = 70.000000000000000000000000000000673771789834325489170710856841) (x = 71, n = 3839075357462738800375895709459, harmonic_num = 71.000000000000000000000000000000055487998355799997491992119251) (x = 72, n = 10435688782275876319204679565481, harmonic_num = 72.000000000000000000000000000000039511092957653362085670240322) (x = 73, n = 28367143184314416294476149278380, harmonic_num = 73.000000000000000000000000000000019564087923901679543705604662) (x = 74, n = 77109889843217734371244199191997, harmonic_num = 74.000000000000000000000000000000010290930609009669488957834992) (x = 75, n = 209606412355297463920369837672528, harmonic_num = 75.000000000000000000000000000000004430877215639277485943258706) (x = 76, n = 569769301833898600601889960891565, harmonic_num = 76.000000000000000000000000000000000345997376197854718026373927) (x = 77, n = 1548793539588883523672155998238746, harmonic_num = 77.000000000000000000000000000000000572189704633748017607606861) (x = 78, n = 4210057334699226968111701228131114, harmonic_num = 78.000000000000000000000000000000000179735220345244638467019028) (x = 79, n = 11444122349683629273152884131857777, harmonic_num = 79.000000000000000000000000000000000074125832798944744266475001) (x = 80, n = 31108349825807040839802780879983900, harmonic_num = 80.000000000000000000000000000000000007926291805625609876723438) (x = 81, n = 84561262044838384316747509193582008, harmonic_num = 81.000000000000000000000000000000000011553751573384930240677557) (x = 82, n = 229861342008047745722830730247403276, harmonic_num = 82.000000000000000000000000000000000001973328628507565939354441) (x = 83, n = 624827909045685970797051309751852406, harmonic_num = 83.000000000000000000000000000000000001023673572029210335564959) (x = 84, n = 1698458351072949270779716460863436733, harmonic_num = 84.000000000000000000000000000000000000334663416871626869699394) (x = 85, n = 4616888472116111518644282411211592430, harmonic_num = 85.000000000000000000000000000000000000005932654520985245335243) (x = 86, n = 12550004037775271302466974506994737925, harmonic_num = 86.000000000000000000000000000000000000007452890360905721858985) (x = 87, n = 34114447922972165086558975884968520121, harmonic_num = 87.000000000000000000000000000000000000006235156428247843262045) (x = 88, n = 92732683876927654880596338797778137601, harmonic_num = 88.000000000000000000000000000000000000007785496044190684699854) (x = 89, n = 252073569486889529428455928155758001446, harmonic_num = 89.000000000000000000000000000000000000001565078366164229879079) (x = 90, n = 685207003371020263122059958005466586972, harmonic_num = 90.000000000000000000000000000000000000000818409883889823632111) (x = 91, n = 1862585745996320133197441417245010973713, harmonic_num = 91.000000000000000000000000000000000000000108746809197877927934) (x = 92, n = 5063032987288631885090741933873056647850, harmonic_num = 92.000000000000000000000000000000000000000176135451467552981374) (x = 93, n = 13762750566235404213510357318770018360477, harmonic_num = 93.000000000000000000000000000000000000000025557128122724293981) (x = 94, n = 37411034773812134716702297182276574136287, harmonic_num = 94.00000000000000000000000000000000000000001139766584057352057) (x = 95, n = 101693736009502973349116272862661579593050, harmonic_num = 95.000000000000000000000000000000000000000007645738585014728452) (x = 96, n = 276432234662743192748020298015175353222438, harmonic_num = 96.000000000000000000000000000000000000000000992565070592590082) (x = 97, n = 751420720284061429699574124556466469559612, harmonic_num = 97.000000000000000000000000000000000000000001302724270272438891) (x = 98, n = 2042573289475771283785445559104869149699180, harmonic_num = 98.000000000000000000000000000000000000000000125995855726820449) (x = 99, n = 5552289856077806263406249735487322851932338, harmonic_num = 99.00000000000000000000000000000000000000000011441985638943799) (x = 100, n = 15092688622113788323693563264538101449859497, harmonic_num = 100.00000000000000000000000000000000000000000000900432120889788)
result1 == result2
true
H_Float64(n) = harmonic(Float64(n))
result3 = [f(n, H_Float64) for n in 2:34]
33-element Vector{NamedTuple{(:x, :n, :harmonic_num), Tuple{Int64, BigInt, Float64}}}: (x = 2, n = 4, harmonic_num = 2.083333333333335) (x = 3, n = 11, harmonic_num = 3.019877344877345) (x = 4, n = 31, harmonic_num = 4.02724519543652) (x = 5, n = 83, harmonic_num = 5.002068272680165) (x = 6, n = 227, harmonic_num = 6.004366708345566) (x = 7, n = 616, harmonic_num = 7.001274097134161) (x = 8, n = 1674, harmonic_num = 8.000485571995778) (x = 9, n = 4550, harmonic_num = 9.00020806293114) (x = 10, n = 12367, harmonic_num = 10.000043008275808) (x = 11, n = 33617, harmonic_num = 11.000017708636427) (x = 12, n = 91380, harmonic_num = 12.000003051665633) (x = 13, n = 248397, harmonic_num = 13.000001229480786) (x = 14, n = 675214, harmonic_num = 14.000001362053405) (x = 15, n = 1835421, harmonic_num = 15.000000378267764) (x = 16, n = 4989191, harmonic_num = 16.000000095453824) (x = 17, n = 13562027, harmonic_num = 17.000000014849928) (x = 18, n = 36865412, harmonic_num = 18.000000003719933) (x = 19, n = 100210581, harmonic_num = 19.000000009733302) (x = 20, n = 272400600, harmonic_num = 20.000000001617444) (x = 21, n = 740461601, harmonic_num = 21.000000000401336) (x = 22, n = 2012783315, harmonic_num = 22.000000000138446) (x = 23, n = 5471312310, harmonic_num = 23.000000000019792) (x = 24, n = 14872568831, harmonic_num = 24.000000000022723) (x = 25, n = 40427833596, harmonic_num = 25.000000000006082) (x = 26, n = 109894245429, harmonic_num = 26.000000000007606) (x = 27, n = 298723530401, harmonic_num = 27.000000000001823) (x = 28, n = 812014744422, harmonic_num = 28.000000000000554) (x = 29, n = 2207284924203, harmonic_num = 29.0000000000001) (x = 30, n = 6000022499693, harmonic_num = 30.000000000000025) (x = 31, n = 16309752131262, harmonic_num = 31.000000000000036) (x = 32, n = 44334502845080, harmonic_num = 32.0) (x = 33, n = 120513673457548, harmonic_num = 33.0) (x = 34, n = 327590128640499, harmonic_num = 34.0)
A = getproperty.(result1[eachindex(result3)], :n)
B = getproperty.(result3, :n)
@show A[1:end-1] == B[1:end-1]
[(x = result1[k].x, n_BigFloat = A[k], n_Float64 = B[k]) for k in eachindex(A)]
A[1:end - 1] == B[1:end - 1] = true
33-element Vector{NamedTuple{(:x, :n_BigFloat, :n_Float64), Tuple{Int64, BigInt, BigInt}}}: (x = 2, n_BigFloat = 4, n_Float64 = 4) (x = 3, n_BigFloat = 11, n_Float64 = 11) (x = 4, n_BigFloat = 31, n_Float64 = 31) (x = 5, n_BigFloat = 83, n_Float64 = 83) (x = 6, n_BigFloat = 227, n_Float64 = 227) (x = 7, n_BigFloat = 616, n_Float64 = 616) (x = 8, n_BigFloat = 1674, n_Float64 = 1674) (x = 9, n_BigFloat = 4550, n_Float64 = 4550) (x = 10, n_BigFloat = 12367, n_Float64 = 12367) (x = 11, n_BigFloat = 33617, n_Float64 = 33617) (x = 12, n_BigFloat = 91380, n_Float64 = 91380) (x = 13, n_BigFloat = 248397, n_Float64 = 248397) (x = 14, n_BigFloat = 675214, n_Float64 = 675214) (x = 15, n_BigFloat = 1835421, n_Float64 = 1835421) (x = 16, n_BigFloat = 4989191, n_Float64 = 4989191) (x = 17, n_BigFloat = 13562027, n_Float64 = 13562027) (x = 18, n_BigFloat = 36865412, n_Float64 = 36865412) (x = 19, n_BigFloat = 100210581, n_Float64 = 100210581) (x = 20, n_BigFloat = 272400600, n_Float64 = 272400600) (x = 21, n_BigFloat = 740461601, n_Float64 = 740461601) (x = 22, n_BigFloat = 2012783315, n_Float64 = 2012783315) (x = 23, n_BigFloat = 5471312310, n_Float64 = 5471312310) (x = 24, n_BigFloat = 14872568831, n_Float64 = 14872568831) (x = 25, n_BigFloat = 40427833596, n_Float64 = 40427833596) (x = 26, n_BigFloat = 109894245429, n_Float64 = 109894245429) (x = 27, n_BigFloat = 298723530401, n_Float64 = 298723530401) (x = 28, n_BigFloat = 812014744422, n_Float64 = 812014744422) (x = 29, n_BigFloat = 2207284924203, n_Float64 = 2207284924203) (x = 30, n_BigFloat = 6000022499693, n_Float64 = 6000022499693) (x = 31, n_BigFloat = 16309752131262, n_Float64 = 16309752131262) (x = 32, n_BigFloat = 44334502845080, n_Float64 = 44334502845080) (x = 33, n_BigFloat = 120513673457548, n_Float64 = 120513673457548) (x = 34, n_BigFloat = 327590128640500, n_Float64 = 327590128640499)
using SpecialFunctions
harmonic_naive(n) = sum(inv, Base.OneTo(n))
harmonic_digamma(n) = digamma(n + 1) - digamma(1)
harmonic_digamma (generic function with 1 method)
harmonic_naive(10)
2.9289682539682538
harmonic_digamma(10)
2.928968253968253
[(n, harmonic_digamma(n) - harmonic_naive(n)) for n in 1:20]
20-element Vector{Tuple{Int64, Float64}}: (1, 4.440892098500626e-16) (2, 2.220446049250313e-16) (3, 2.220446049250313e-16) (4, 4.440892098500626e-16) (5, 4.440892098500626e-16) (6, 4.440892098500626e-16) (7, -1.3322676295501878e-15) (8, -8.881784197001252e-16) (9, -8.881784197001252e-16) (10, -8.881784197001252e-16) (11, -8.881784197001252e-16) (12, -1.3322676295501878e-15) (13, -1.7763568394002505e-15) (14, -1.7763568394002505e-15) (15, -1.7763568394002505e-15) (16, -1.7763568394002505e-15) (17, -1.7763568394002505e-15) (18, -1.7763568394002505e-15) (19, -2.220446049250313e-15) (20, -1.7763568394002505e-15)
[(2^n, harmonic_digamma(2^n) - harmonic_naive(2^n)) for n in 1:20]
20-element Vector{Tuple{Int64, Float64}}: (2, 2.220446049250313e-16) (4, 4.440892098500626e-16) (8, -8.881784197001252e-16) (16, -1.7763568394002505e-15) (32, -8.881784197001252e-16) (64, -1.7763568394002505e-15) (128, -8.881784197001252e-16) (256, 0.0) (512, -1.7763568394002505e-15) (1024, 0.0) (2048, 0.0) (4096, 0.0) (8192, 0.0) (16384, 0.0) (32768, 0.0) (65536, 0.0) (131072, -1.7763568394002505e-15) (262144, -1.7763568394002505e-15) (524288, -1.7763568394002505e-15) (1048576, -1.7763568394002505e-15)
using Base.MathConstants: γ
using Plots
harmonic_approx(x) = log(x) + γ + 1/(2x)
n = 1:50
x = range(extrema(n)...; length=1000)
plot(; legend=:bottomright)
scatter!(n, harmonic_naive.(n); label="harmonic numbers")
plot!(x, harmonic_approx.(x); label="log(x) + γ + 1/(2x)")
[(n, harmonic_approx(n) - harmonic_naive(n)) for n in 1:20]
20-element Vector{Tuple{Int64, Float64}}: (1, 0.07721566490153275) (2, 0.020362845461478152) (3, 0.00916128690297624) (4, 0.005176692688090512) (5, 0.0033202440023001323) (6, 0.0023084674629214597) (7, 0.0016972425282753) (8, 0.001300063724225975) (9, 0.0010275438250539892) (10, 0.0008325039273247015) (11, 0.0006881382771042333) (12, 0.0005783031455215415) (13, 0.0004928056908526379) (14, 0.00042495366874995) (15, 0.00037020610808236043) (16, 0.0003253939123202265) (17, 0.0002882510228729984) (18, 0.0002571223791609789) (19, 0.0002307763979745303) (20, 0.00020828131184114085)
harmonic_approx2(x) = log(x) + γ + 1/(2x) - 1/(12x^2)
[(n, harmonic_approx2(n) - harmonic_naive(n)) for n in 1:20]
20-element Vector{Tuple{Int64, Float64}}: (1, -0.006117668431800616) (2, -0.00047048787185510754) (3, -9.797235628306034e-5) (4, -3.164064524296961e-5) (5, -1.3089331033278029e-5) (6, -6.347351893420949e-6) (7, -3.437743833600848e-6) (8, -2.019609107506426e-6) (9, -1.2627593082292776e-6) (10, -8.294060087621347e-7) (11, -5.669570555255632e-7) (12, -4.0055818217865635e-7) (13, -2.909560903319175e-7) (14, -2.1639927716421425e-7) (15, -1.642622882158662e-7) (16, -1.2692101325484373e-7) (17, -9.961149860515661e-8) (18, -7.926692946469416e-8) (19, -6.386056661256134e-8) (20, -5.20214920030071e-8)