gpt4 book ai didi

julia - 在 Julia 1.0+ 中,打印 pi 小数点后的前 2,000 位

转载 作者:行者123 更新时间:2023-12-02 03:21:22 25 4
gpt4 key购买 nike

出于教学目的,您将如何编写“julian”Julia 1.0+ 代码来打印 pi 小数点后的前 2,000 位数字?在 Julia REPL 中,结果应该匹配这个 pi website

预期的输出是:

julia> include("solution.jl")
Pi to 2,000 digits to right of decimal point is:
3.
14159265358979323846264338327950288419716939937510
58209749445923078164062862089986280348253421170679
82148086513282306647093844609550582231725359408128
48111745028410270193852110555964462294895493038196
44288109756659334461284756482337867831652712019091
45648566923460348610454326648213393607260249141273
72458700660631558817488152092096282925409171536436
78925903600113305305488204665213841469519415116094
33057270365759591953092186117381932611793105118548
07446237996274956735188575272489122793818301194912
98336733624406566430860213949463952247371907021798
60943702770539217176293176752384674818467669405132
00056812714526356082778577134275778960917363717872
14684409012249534301465495853710507922796892589235
42019956112129021960864034418159813629774771309960
51870721134999999837297804995105973173281609631859
50244594553469083026425223082533446850352619311881
71010003137838752886587533208381420617177669147303
59825349042875546873115956286388235378759375195778
18577805321712268066130019278766111959092164201989
38095257201065485863278865936153381827968230301952
03530185296899577362259941389124972177528347913151
55748572424541506959508295331168617278558890750983
81754637464939319255060400927701671139009848824012
85836160356370766010471018194295559619894676783744
94482553797747268471040475346462080466842590694912
93313677028989152104752162056966024058038150193511
25338243003558764024749647326391419927260426992279
67823547816360093417216412199245863150302861829745
55706749838505494588586926995690927210797509302955
32116534498720275596023648066549911988183479775356
63698074265425278625518184175746728909777727938000
81647060016145249192173217214772350141441973568548
16136115735255213347574184946843852332390739414333
45477624168625189835694855620992192221842725502542
56887671790494601653466804988627232791786085784383
82796797668145410095388378636095068006422512520511
73929848960841284886269456042419652850222106611863
06744278622039194945047123713786960956364371917287
46776465757396241389086583264599581339047802759009

最佳答案

对于像我这样的 Julia 新手,也许还有其他人来说,用很少的代码解决这个问题的关键在于,Julia 中的 pi 常量没有硬编码到一些数字,像许多其他语言一样。在 Julia 中,pi 常量根据当前操作的基础精度“更改”其精度,例如,本例中 Julia 当前的 BigFloat 精度。

因此,如果我们将 BigFloat 精度设置为 2,001 位十进制数字,并使用 pi 执行 BigFloat 结果操作,我们应该会得到所需的答案.

据我所知,执行此操作的最简单方法是将 pi 更改为 BigFloat 类型。这将导致结果类型为 BigFloat,如该代码所示。

julia> VERSION
v"1.1.0"

julia> typeof(BigFloat(pi)) # big"1" * pi also works
BigFloat

原题可以用这个方法解决,如下代码所示。请注意,可能不需要在 setprecision 输入计算中使用 2,002 与 2,001 十进制数字,但我至少使用了一个额外数字作为“保护”数字,以进行任何可能的舍入。

setprecision(Int(ceil(log2(10) * 2002))) do
pi_str = string(BigFloat(pi))[1:3+1999]
digits_str = pi_str[3:3+1999]
println("Pi to 2,000 digits to right of decimal point is:")
println(pi_str[1:2])
for start in 1:50:1951
println(digits_str[start:start+49])
end
end

Julia 可以用这么少的代码解决这个问题,我觉得很了不起!我还对小数点后 10,000 位进行了尝试,效果很好。

这是输出:

julia> include("solution.jl")
Pi to 2,000 digits to right of decimal point is:
3.
14159265358979323846264338327950288419716939937510
58209749445923078164062862089986280348253421170679
82148086513282306647093844609550582231725359408128
48111745028410270193852110555964462294895493038196
44288109756659334461284756482337867831652712019091
45648566923460348610454326648213393607260249141273
72458700660631558817488152092096282925409171536436
78925903600113305305488204665213841469519415116094
33057270365759591953092186117381932611793105118548
07446237996274956735188575272489122793818301194912
98336733624406566430860213949463952247371907021798
60943702770539217176293176752384674818467669405132
00056812714526356082778577134275778960917363717872
14684409012249534301465495853710507922796892589235
42019956112129021960864034418159813629774771309960
51870721134999999837297804995105973173281609631859
50244594553469083026425223082533446850352619311881
71010003137838752886587533208381420617177669147303
59825349042875546873115956286388235378759375195778
18577805321712268066130019278766111959092164201989
38095257201065485863278865936153381827968230301952
03530185296899577362259941389124972177528347913151
55748572424541506959508295331168617278558890750983
81754637464939319255060400927701671139009848824012
85836160356370766010471018194295559619894676783744
94482553797747268471040475346462080466842590694912
93313677028989152104752162056966024058038150193511
25338243003558764024749647326391419927260426992279
67823547816360093417216412199245863150302861829745
55706749838505494588586926995690927210797509302955
32116534498720275596023648066549911988183479775356
63698074265425278625518184175746728909777727938000
81647060016145249192173217214772350141441973568548
16136115735255213347574184946843852332390739414333
45477624168625189835694855620992192221842725502542
56887671790494601653466804988627232791786085784383
82796797668145410095388378636095068006422512520511
73929848960841284886269456042419652850222106611863
06744278622039194945047123713786960956364371917287
46776465757396241389086583264599581339047802759009

关于julia - 在 Julia 1.0+ 中,打印 pi 小数点后的前 2,000 位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54660426/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com