首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在NumPy中使用极小的浮点数

在NumPy中使用极小的浮点数
EN

Stack Overflow用户
提问于 2018-04-10 12:58:02
回答 1查看 645关注 0票数 1

我正在使用Python 3,并试图绘制一个进程的半衰期。这个半衰期的公式是-ln(2)/(ln(1-f))。在这个公式中,f是一个极小的数,在大多数情况下是10^-17阶,甚至更少。

因为我必须绘制f的范围,所以我必须多次重复计算-ln(2)/(ln(1-f))。我这样做是通过表达

代码语言:javascript
复制
np.log(2)/(-1*np.log(1-f))

当我为f的许多值绘制半衰期时,我发现对于非常小的f值,Python开始将1-f舍入相同的数,尽管我输入了f的相同值。

无论如何,我是否可以提高浮点精度,以便Python可以在1-f的输出之间对f中的小变化进行研究?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-10 13:23:14

您想要的结果可以使用numpy.log1p实现。它以比log(1 + x)更高的数值精度计算numpy.log(1 + x),或者,如文档所述:

对于实值输入,log1p对于x也是精确的,以至于1 + x == 1在浮点精度上是如此之小.

这样,您的代码将变成:

代码语言:javascript
复制
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))

这一点可以持续地加以评价:

代码语言:javascript
复制
import matplotlib.pyplot as plt
plt.loglog(f, y)
plt.show()

只有当f的值离开浮动的范围,即一直到1e-308时,这个函数才会停止工作。这对于任何物理测量都是足够的(特别是考虑到有一个最小的物理时间尺度,普朗克时间 t_P =5.39116(13)e-44s)。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49754349

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档