NaN的Python语言原因(除以零除外)

时间:2015-11-08 14:28:14

标签: python nan

我现在处于亏损状态,我有一个适用于大多数参数的程序,但是对于某些参数,它会抛出一个NaN异常。问题似乎在于计算略大于1的值。我有一个类似于f(x,t)的函数,对于x的大值,f随t快速增加并且没有问题,但对于小值xf的增加非常缓慢。对于较小的x值,它根本不起作用(表示离散时间步长的数组):

1.0
1.0
1.0
NaN

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

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

1.0
1.000000000000074
1.000000000000486
1.000000000000888

依此类推,完全没有问题。

1 个答案:

答案 0 :(得分: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在Python 2.7中返回1)
      • powr函数将所有三个不确定形式定义为无效操作,因此返回NaN。
      • 具有复杂结果的实际操作,例如:[对于我尝试过的所有操作,使用math.sqrt,math.log,math.asin而不是在python中抛出Math Domain Error而不是返回NaN)]
        • 负数的平方根。
        • 负数的对数
        • 小于-1或大于+1的数字的反正弦或余弦。