Python 在被零除的情况下不遵循 IEEE-754 吗?

问题描述 投票:0回答:1

这里有一个玩具示例,Python 表现出的行为令我惊讶:

def harmonic_mean(x, y):
    return 2/(1/x+1/y)

print(harmonic_mean(0.0, 1.0))

在 IEEE-754 中,除以

0.0
不应停止执行,而应该只产生
inf
(或
-inf
NaN
)。因此,即使参数之一是
0.0
,上面的代码也应该有效。然而,它似乎停止并打印
ZeroDivisionError: float division by zero
。这是否意味着即使在支持 IEEE-754 标准的平台上,Python 也不遵循该标准?除以
0.0
导致运行时错误而不是产生标准规定的结果的动机是什么?除了显式检查零之外,我还有其他办法解决这个问题吗?我知道在这个特定的例子中我可以改为例如使用以下内容:

def harmonic_mean(x, y):
    return 2*x*y/(x+y)

但是,我想知道我可以更广泛地做什么。

python floating-point runtime-error ieee-754 divide-by-zero
1个回答
0
投票

例如,此处对此进行了讨论。

根据该讨论,Python 确实遵循 IEEE-754,通过引发异常来表示溢出或奇点。

© www.soinside.com 2019 - 2024. All rights reserved.