当我使用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 ......,这只是稍微好一些。
有更好的方法可以获得更高的精确度吗?
答案 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个数字是正确的。