当我使用 Python 时,我遇到了一些明显的舍入误差,这些误差对于简单的浮点问题来说似乎太大了。我有以下变量:
p = 2.2*10**9
m = 0.510999*10**6
然后我通过以下方式发送它:
b = 1/np.sqrt((m/p)**2 + 1) = 0.99999997302479693
然后我通过另一个应该返回 p 的方程使用这个值:
p = (1/np.sqrt(1-b**2)) * m * b = 2200000008.1937...
上述给出了 8.19 的 p 差异...(如果使用科学记数法,小数点后第 9 位有误差),这似乎太大了,不能简单地四舍五入。
我已经尝试使用具有任意高精度的 Decimal().sqrt()
进行所有计算,我得到的 p 差异为 1.8935...,这只是稍微好一点。
有没有更好的方法来获得更高的精度?
最佳答案
是操作
sqrt(1+x)
那会让你失去那么多的精确度。或者实际上是它的 1+x
部分。由于您的 x=(m/p)**2
的大小为 1e-6
,因此您丢失了 的 15-16 位有效十进制数字中的大约 5-6 位数字code>x
,这样就只剩下 9-10 个有效数字。在重建中,您可以准确地看到,(只有)前 9 位数字是正确的。
关于python - 获得 'large' 错误,这些错误似乎太大而不能单独来自舍入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39964995/