为什么 x*x 和 x**2 会返回不同的结果?

lit*_*Yii 10 python floating-point

x = 1.5 * 10 ** 156
print(x * x)
print(x ** 2)
Run Code Online (Sandbox Code Playgroud)

x * x并且x ** 2在数学上是等价的。但当x较大时,前者可以返回 的结果inf,而后者会引发溢出错误。

x = 1.5 * 10 ** 156
print(x * x)
print(x ** 2)
Run Code Online (Sandbox Code Playgroud)

为什么会这样呢?

小智 6

为什么乘法和乘方之间存在差异?

\n

当 Python 第一次被编写时,这可能已经深深地埋藏在历史的迷雾之中了。Python中的浮点乘法必须遵循IEEE-754标准制定的规则,该标准存在乘法溢出到特殊值float(\xe2\x80\x98inf\xe2\x80\x99)的情况。

\n

但由于现在已经失去的原因,无论是谁设计了 Python\xe2\x80\x99s 指数运算符和 pow() 函数,都做出了不同的决定来引发 OverflowError。

\n

\xe2\x80\x99s 差异背后可能没有真正的逻辑。这可能只是当时有人认为这是个好主意的一个例子。

\n

来源

\n

  • 注意 IEEE754 语义仅在 Python 3.11 中需要,之前它对“float”语义是不可知的。它对 C 编译器为“double”类型提供的任何内容感到满意(在绝大多数系统上,这确实是 IEEE754 二进制 64 浮点数)。/sf/ask/4912914611/ 有更多信息 (4认同)