替换python中的小浮点数

问题描述

对于误差函数,我计算的是绝对误差,即 abs(should-simulated)

但是,不幸的是,我的 simulated 值可能非常小,例如 1e-38。当我尝试从 should 中减去它们时,输出等于 should,因为这些值对于 Python 来说太小了。为了防止这种情况,我采用了 shouldsimulated 的对数,但是,这会使误差非线性,这不符合我的目的。我尝试使用 decimal 包,但即使这样也不适用于这么小的数字。 有没有办法不用对数或小数来计算小值的减法?

解决方法

decimal 包可以处理任意用户定义的精度。您可以使用 decimal.getcontext().prec 获得默认精度,并且也设置此值以获得更好的精度。在我的机器上,默认情况下它是 28,这不是很大,但对于大多数情况来说已经足够了。如果您想要非常精确的精度,可以将其设置为 300 之类的大值,但 50 应该已经足够清楚了。请注意,1e-42 的相对精度是整个可观测宇宙的原子核之一。