我正在尝试编写一个应用程序,它可以使用 chudnovsky 算法运行任意小数位数的 PI。我有2个问题。
问题:
应该有任意数量的小数位。就我而言,只有 77 个(如果我的计数是正确的)
结果并不完全是 PI。只有前 15 位小数是完全正确的。不过,可能与第一个问题有关。
环境:
我正在使用 VSCode 进行编码,运行 Fedora33 等。在这种情况下,尽管我 99.9% 确信这只是一个实现错误。
我的方法:
我试图找出输出.Acc()
不再是“精确”的地方。我发现这发生在生产线上sum = sum.Add(sum, sumElement(big.NewFloat(float64(i))))
。.Acc()
虽然来自 sumElement的返回值是Exact
。但因此,公式与(-1)^k
sumElement 的每次执行相乘,从而导致交替。这就是为什么我不确定.Acc()
在这种情况下是否是一个有效的指标。
可能在代码中的某个地方,在错误的地方使用了有限的数据类型,因此更多的小数位被截断。
代码:
代码应该是可执行的并返回:
精确的
3.14159265358979319192147977918646609202090703009518871119759542708150903010657
以上
第一行和最后一行是 math/big 包的 .Acc() 函数的返回值,中间的数字是我当前的 PI 结果。
蝴蝶刀刀
相关分类