获得“大”错误似乎太大而不能单独舍入

时间:2016-10-10 18:58:07

标签: python python-3.x numpy math rounding

当我使用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...

前面给出了p值为8.19的差异...(如果使用科学记数法,则在小数点后第9位误差),这似乎太大而不仅仅是四舍五入的问题。

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

有更好的方法可以获得更高的精确度吗?

1 个答案:

答案 0 :(得分:5)

这是操作

1+x

这会让你失去那么精确。或者真正的x=(m/p)**2部分。由于您的1e-6的幅度为x,您将失去#content{display:flex;} #primary{order:2; flex:1 0 0;} #secondary{order:1; flex:1 0 0;} #tertiary{order:3; flex:1 0 0;} 的15-16个有效十进制数字的大约5-6位数字,因此只剩下9-10个有效数字。在重建过程中,您确切地看到,(仅)前9个数字是正确的。