为了账号安全,请及时绑定邮箱和手机立即绑定

不计算程序应使用“数学/大”的“无限”小数位

不计算程序应使用“数学/大”的“无限”小数位

Go
繁华开满天机 2022-07-11 17:41:11
我正在尝试编写一个应用程序,它可以使用 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呼叫中,这将导致您正在寻找的准确性。


查看完整回答
反对 回复 2022-07-11
  • 1 回答
  • 0 关注
  • 121 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信