在 python 中替换小浮点数
substitute small floats in python
对于误差函数,我正在计算绝对误差,即 abs(should-simulated)
。
然而,不幸的是,我的 simulated
值可能非常小,例如 1e-38。当我尝试从 should
中减去它们时,输出等于 should
,因为这些值对于 Python 来说太小了。为了防止这种情况,我取了 should
和 simulated
的对数,但是,这使误差成为非线性的,这不符合我的目的。我尝试使用 decimal
包,但即使这样也不适用于这么小的数字。
有什么方法可以在不使用对数或小数的情况下计算小值的减法吗?
decimal
包可以处理任意用户定义的精度。您可以使用 decimal.getcontext().prec
获得默认精度,并且 也可以设置此值 以获得更好的精度。在我的机器上,它默认为 28,这不是很大,但对于大多数情况来说已经足够了。如果你想要非常精确,你可以将它设置为一个很大的值,比如 300,但是显然 50 应该已经足够了。请注意,1e-42 的相对精度是整个可观测宇宙中原子核的一个。
对于误差函数,我正在计算绝对误差,即 abs(should-simulated)
。
然而,不幸的是,我的 simulated
值可能非常小,例如 1e-38。当我尝试从 should
中减去它们时,输出等于 should
,因为这些值对于 Python 来说太小了。为了防止这种情况,我取了 should
和 simulated
的对数,但是,这使误差成为非线性的,这不符合我的目的。我尝试使用 decimal
包,但即使这样也不适用于这么小的数字。
有什么方法可以在不使用对数或小数的情况下计算小值的减法吗?
decimal
包可以处理任意用户定义的精度。您可以使用 decimal.getcontext().prec
获得默认精度,并且 也可以设置此值 以获得更好的精度。在我的机器上,它默认为 28,这不是很大,但对于大多数情况来说已经足够了。如果你想要非常精确,你可以将它设置为一个很大的值,比如 300,但是显然 50 应该已经足够了。请注意,1e-42 的相对精度是整个可观测宇宙中原子核的一个。