Joh*_*ohn 2 python math numpy rounding python-3.x
当我使用Python时,我得到一些重要的舍入错误,这些错误对于简单的浮点问题来说似乎太大了.我有以下变量:
p = 2.2*10**9
m = 0.510999*10**6
Run Code Online (Sandbox Code Playgroud)
然后我通过以下内容发送它:
b = 1/np.sqrt((m/p)**2 + 1) = 0.99999997302479693
Run Code Online (Sandbox Code Playgroud)
然后我通过另一个应该返回p的等式使用这个值:
p = (1/np.sqrt(1-b**2)) * m * b = 2200000008.1937...
Run Code Online (Sandbox Code Playgroud)
前面提到的p的差异为8.19 ...(如果使用科学记数法,则在小数点后第9位误差),这似乎太大而不仅仅是舍入问题.
我尝试使用Decimal().sqrt()任意高精度的所有计算,我得到的差值为1.8935 ......,这只是稍微好一些.
有更好的方法来获得更高的精度吗?
这是操作
sqrt(1+x)
Run Code Online (Sandbox Code Playgroud)
这会让你失去那么精确.或者真的1+x是它的一部分.由于你x=(m/p)**2的幅度很大1e-6,你会丢失15-16个有效十进制数字的5-6位数字x,因此只剩下9-10个有效数字.在重建过程中,您可以确切地看到,(仅)前9个数字是正确的.
| 归档时间: |
|
| 查看次数: |
85 次 |
| 最近记录: |