python - 获得 'large' 错误,这些错误似乎太大而不能单独来自舍入

标签 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...

上述给出了 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/

相关文章:

python - 打印文件/列表中相同值的索引

python - View 中的 Numpy reshape

python - 在 Python 中是否可以声明必须重写该方法?

Python:查找索引

javascript - 使用Python-Shell运行Python脚本后无响应

python - Django - 限制 unique_together 列上的键大小

python - SQLAlchemy 列属性和关系返回 bool 值

python - 递归基础表示

python - sklearn 上的逻辑回归函数

python - 通过操作现有列创建新列