在Python中处理特殊浮点值
我正在写一个简单的应用程序,它会接收一堆数字输入,然后计算出一组结果。(这个应用是用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 个回答
2
不,Python自带的数学功能在出错时会抛出异常,而不是返回NaN(不是一个数字)或INF(无穷大)。如果你不想要这种行为,就需要使用一个库或者自己写代码来处理。
(我想给个简单的答案,因为很多问题的答案都是“抱歉,不可以”,但却没有人回答。)