Python 在NumPy中使用非常小的浮动

Python 在NumPy中使用非常小的浮动,python,numpy,Python,Numpy,我正在使用Python3并试图绘制进程的半衰期。该半衰期的公式为-ln2/ln1-f。在这个公式中,f是一个非常小的数字,在大多数情况下为10^-17阶,甚至更少 因为我必须绘制f的一系列值,我必须重复计算-ln2/ln1-f多次。我是通过表达式来实现的 np.log(2)/(-1*np.log(1-f)) 当我绘制许多f值的半衰期时,我发现对于非常小的f值,Python开始将1-f四舍五入到相同的数字,即使我输入了相同的f值 我是否可以提高浮点精度,以便Python能够区分1-f的输出和f的

我正在使用Python3并试图绘制进程的半衰期。该半衰期的公式为-ln2/ln1-f。在这个公式中,f是一个非常小的数字,在大多数情况下为10^-17阶,甚至更少

因为我必须绘制f的一系列值,我必须重复计算-ln2/ln1-f多次。我是通过表达式来实现的

np.log(2)/(-1*np.log(1-f))
当我绘制许多f值的半衰期时,我发现对于非常小的f值,Python开始将1-f四舍五入到相同的数字,即使我输入了相同的f值


我是否可以提高浮点精度,以便Python能够区分1-f的输出和f的微小变化

您想要的结果可以通过使用来实现。它以比numpy.log1+x更好的数值精度计算log1+x,或者,正如文档所说:

对于实值输入,log1p对于x也是精确的,因为x非常小 浮点精度为1+x==1

这样,您的代码就变成:

import numpy as np

min_f, max_f = -32, -15
f = np.logspace(min_f, max_f, max_f - min_f + 1)
y = np.log(2)/(-1*np.log1p(-f))
这可以一致地进行评估:

import matplotlib.pyplot as plt
plt.loglog(f, y)
plt.show()

仅当f值离开浮动范围(即降至1e-308)时,此功能才会停止工作。这对于任何物理测量都是足够的,特别是考虑到存在最小的物理时间标度,t_P=5.3911613e-44 s。可以通过使用来实现您想要的结果。它以比numpy.log1+x更好的数值精度计算log1+x,或者,正如文档所说:

对于实值输入,log1p对于x也是精确的,因为x非常小 浮点精度为1+x==1

这样,您的代码就变成:

import numpy as np

min_f, max_f = -32, -15
f = np.logspace(min_f, max_f, max_f - min_f + 1)
y = np.log(2)/(-1*np.log1p(-f))
这可以一致地进行评估:

import matplotlib.pyplot as plt
plt.loglog(f, y)
plt.show()

仅当f值离开浮动范围(即降至1e-308)时,此功能才会停止工作。这对于任何物理测量来说都应该足够了,特别是考虑到存在最小的物理时间尺度,t_P=5.3911613e-44 s。

对于python和numpy来说更精确一些。numpy仅支持。在python中,可以使用。我希望fp math的一般特征对您来说是清楚的。请更精确地描述python与numpy。numpy仅支持。在python中,可以使用。我希望你清楚fp数学的一般特征。