我正在尝试编写一个应用程序,它可以使用 chudnovsky 算法运行任意小数位数的 PI。我有2个问题。问题:应该有任意数量的小数位。就我而言,只有 77 个(如果我的计数是正确的)结果并不完全是 PI。只有前 15 位小数是完全正确的。不过,可能与第一个问题有关。环境:我正在使用 VSCode 进行编码,运行 Fedora33 等。在这种情况下,尽管我 99.9% 确信这只是一个实现错误。我的方法:我试图找出输出.Acc()不再是“精确”的地方。我发现这发生在生产线上sum = sum.Add(sum, sumElement(big.NewFloat(float64(i))))。.Acc()虽然来自 sumElement的返回值是Exact。但因此,公式与(-1)^ksumElement 的每次执行相乘,从而导致交替。这就是为什么我不确定.Acc()在这种情况下是否是一个有效的指标。可能在代码中的某个地方,在错误的地方使用了有限的数据类型,因此更多的小数位被截断。代码:代码应该是可执行的并返回:精确的3.14159265358979319192147977918646609202090703009518871119759542708150903010657以上第一行和最后一行是 math/big 包的 .Acc() 函数的返回值,中间的数字是我当前的 PI 结果。
1 回答
蝴蝶刀刀
TA贡献1801条经验 获得超8个赞
每个big.Float
都有特定的、有限的精度。精度的大小取决于最初设置值的方式。从big.NewFloat
文档
NewFloat 分配并返回一个设置为 x 的新 Float,精度为 53 ...
由于您的所有浮点值都是从创建的,因此您永远不会比您开始使用big.NewFloat
的文字更精确。float64
一个简单的概念证明是添加.SetPrec(512)
到您的所有NewFloat
呼叫中,这将导致您正在寻找的准确性。
- 1 回答
- 0 关注
- 121 浏览
添加回答
举报
0/150
提交
取消