出现 'large' 个错误,这些错误似乎太大而不能单独来自四舍五入

Getting 'large' errors that seem too big to be from rounding alone

当我使用 Python 时,我得到了一些明显的舍入误差,这些误差对于简单的浮点问题来说似乎太大了。我有以下变量:

p = 2.2*10**9
m = 0.510999*10**6

然后我通过以下方式发送:

b = 1/np.sqrt((m/p)**2 + 1) = 0.99999997302479693

然后我通过另一个应该 return p:

的方程使用这个值
p = (1/np.sqrt(1-b**2)) * m * b = 2200000008.1937...

前面提到的 p 相差 8.19...(如果使用科学记数法,小数点后第 9 位有误差),这似乎太大了,不能简单地四舍五入。

我已经尝试使用 Decimal().sqrt() 以任意高精度进行所有计算,我得到的 p 差异为 1.8935...,这只是稍微好一点。

有没有更好的方法来获得更高的精度?

就是操作

sqrt(1+x)

那会让你失去那么多的精确度。或者真的是它的 1+x 部分。由于您的 x=(m/p)**2 的大小为 1e-6,您丢失了 x 的 15-16 位有效十进制数字中的大约 5-6 位,因此只剩下 9-10 位有效数字。并且在重建中你确切地看到,(只有)前 9 位数字是正确的。