我正在编写一个简单的应用程序,它需要一堆数字输入并计算一组结果。 (该应用程序在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算术运算?或者有更简单的方法吗?
答案 0 :(得分:2)
不,Python的内置数学会引发错误异常,而不是将它们作为NaN和INF返回。如果您不想要这种行为,则需要使用库或您自己的代码。
(以为我会给出简单的答案,因为太多的问题答案是“抱歉,不”,根本就没有得到答案。)