【问题标题】:Smallest positive float64 number最小的正 float64 数
【发布时间】:2016-07-20 09:51:30
【问题描述】:

我需要找到一个尽可能接近零的numpy.float64 值。

Numpy 提供了几个允许做类似事情的常量:

  • np.finfo(np.float64).eps = 2.2204460492503131e-16
  • np.finfo(np.float64).tiny = 2.2250738585072014e-308

这些都相当小,但是当我这样做时

>>> x = np.finfo(np.float64).tiny
>>> x / 2
6.9533558078350043e-310

结果更小。使用即兴二进制搜索时,我可以降低到大约1e-323,然后将值向下舍入到0.0

在我缺少的 numpy 中是否有一个常量?或者,有没有正确的方法可以做到这一点?

【问题讨论】:

  • 使用 np.nextafter。几乎重复:stackoverflow.com/questions/6063755/…
  • 谢谢,这正是我所需要的。如果您将其写为答案,我将很乐意接受。我同意您链接的问题的主题是相似的,但我从没想过寻找与我的问题相关的关键字。
  • 请问您为什么需要这个?只是为了确保你没有被 XY 问题困住:)
  • 主要是出于好奇。一位同事问我是否知道该怎么做,我想不出比“让我们在 SO 上问这个”更好的答案。不过我不知道他的具体应用。
  • 仅供参考:0 到 np.finfo(np.float64).tiny 之间的浮点值被称为“非正规”或“次正规”数字:en.wikipedia.org/wiki/Denormal_number

标签: python numpy


【解决方案1】:

使用np.nextafter

>>> import numpy as np
>>> np.nextafter(0, 1)
4.9406564584124654e-324
>>> np.nextafter(np.float32(0), np.float32(1))
1.4012985e-45

【讨论】:

  • 这个函数给了我零,为什么?
  • @Feras,我参加聚会有点晚了,但这表明您的 FPU 中设置了 FTZ 位。可能发生在例如加载启用“快速数学”编译的共享对象。
【解决方案2】:

2^-1075 是最小的正浮点数。 2^-1075 = 5.10^-324

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-20
    • 2021-04-01
    • 2022-01-20
    • 1970-01-01
    相关资源
    最近更新 更多