【问题标题】:Python language reasons for NaN (other than dividing by zero)NaN 的 Python 语言原因(除以零除外)
【发布时间】:2016-02-09 06:26:03
【问题描述】:

目前我很茫然,我有一个程序可以很好地处理大多数参数,但是对于某些参数,它会引发 NaN 异常。问题似乎在于计算略大于 1 的值。我有一个类似于 f(x,t) 的函数,对于较大的 x 值,f 随 t 快速增加并且没有问题,但是对于较小的值xf 随 t 增加非常缓慢。对于较小的 x 值,它根本不起作用(表示离散时间步长的数组):

1.0
1.0
1.0
NaN

我不明白 NaN 是如何返回的,这些值显然不会趋向于无穷大,并且略大于 1。是否存在一些可能引发此异常的数据类型问题?

对于较大的 x 值,行为可能是这样的:

1.0
1.000000000000074
1.000000000000486
1.000000000000888

等等,完全没有问题。

【问题讨论】:

  • 我们必须查看您的代码才能发表评论...
  • 如果没有看到实际代码,我们无话可说。顺便说一句:数据类型本身没有问题。唯一可能出错的是您使用它们的方式。
  • 请分享您的代码。
  • 更准确地说,请分享minimal, complete, and verifiable example。不要共享所有代码。没有人愿意通过 60 行代码来找出问题所在。
  • 对不起,我在过去的三个小时里都在研究这个程序(超过 300 行,所以我认为在这里发布它不公平)。我最终找到了一个 0/​​0,我只是想知道除了除以零(或通常在数学上未定义的东西)之外是否还有其他任何东西会导致这种情况。无论如何,如果有,我的代码不是一个例子。

标签: python nan


【解决方案1】:

PEP 754 专门表示 PositiveInfinty/PositiveInfinity 将返回 NaN。 (并谈到使用 PosInf = 1e300000 作为 PositiveInfinity 的值,但也指出这不便携或不丑)

The wiki page for IEEE 754 NaN's 表示以下附加示例:

  • 以 NaN 作为至少一个操作数的操作。
  • 不确定的形式
    • 0/0 和 ±∞/±∞(分别在您的问题和上述问题中提到)
    • 0×±∞和±∞×0的乘法
    • 加法 ∞ + (−∞)、(−∞) + ∞ 和等效减法
    • 该标准具有权力的替代功能:
      • 标准 pow 函数和整数指数 pown 函数将 0^0、1∞ 和 ∞0 定义为 1。(请注意,我希望使用或至少相似的 0**0在 python 2.7 中 pow 返回 1)
      • powr 函数将所有三种不确定形式定义为无效操作,因此返回 NaN。
      • 具有复杂结果的实际操作,例如:[对于我尝试过的所有操作,使用 math.sqrt、math.log、math.asin 代替在 python 中抛出数学域错误而不是返回 NaN)]
        • 负数的平方根。
        • 负数的对数
        • 小于 -1 或大于 +1 的数的反正弦或余弦。

【讨论】:

    猜你喜欢
    • 2015-04-02
    • 1970-01-01
    • 2020-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-07
    • 1970-01-01
    • 2016-11-29
    相关资源
    最近更新 更多