处理Python中的特殊浮点值

时间:2010-09-23 04:46:03

标签: python floating-point

我正在编写一个简单的应用程序,它需要一堆数字输入并计算一组结果。 (该应用程序在PyGTK中,但我不认为这是相关的。)

我的问题是,如果我想让NaN和Inf传播,那么在每次计算中,我需要做类似的事情:

# At the top of the module
nan = float("nan")
inf = float("inf")

try:
  res = (a + b) / (0.1*c + d)
except ZeroDivisionError:
  # replicate every little subtlety of IEEE 754 here
except OverflowError:
  # replicate every little subtlety of IEEE 754 here again

......或者,当然,为了每次计算而抢先一步:

numerator = a + b
denominator = 0.1*c + d

if denominator == 0:
  # etc
elif math.isnan(numerator):
  # *sigh*

我如何在Python 2.6中明智地处理这个问题?我真的是否需要在每台目标机器上安装一个庞大的第三方模块(numpy,scipy)才能进行IEEE 754算术运算?或者有更简单的方法吗?

1 个答案:

答案 0 :(得分:2)

不,Python的内置数学会引发错误异常,而不是将它们作为NaN和INF返回。如果您不想要这种行为,则需要使用库或您自己的代码。

(以为我会给出简单的答案,因为太多的问题答案是“抱歉,不”,根本就没有得到答案。)