std::numeric_limits::infinity() 的倒数是否为零?

Is the inverse of std::numeric_limits::infinity() zero?

C++ 标准(或 IEEE 754 浮点标准)中是否有任何内容可以保证 1./std::numeric_limits<double>::infinity() 为零(或至少是一个小数)?

在 IEEE 754 下,任何有限数除以无穷大的结果为零(因此在大多数典型的 C++ 实现中也是如此)。

如果分子和分母的符号不同,则结果为负零,即等于零。

是的,根据 GNU C 库参考手册(假设 IEEE 754):

Infinities propagate through calculations as one would expect: for example, 2 + ∞ = ∞, 4/∞ = 0

https://www.gnu.org/software/libc/manual/html_node/Infinity-and-NaN.html

您可能需要检查您的 C++ 编译器是否使用 IEEE 754:

How to check if C++ compiler uses IEEE 754 floating point standard

if(std::numeric_limits<double>::is_iec559) yes(); else no();

(见 18.3.2.4)

IEC 559 与 IEEE 754 相同,保证是这种情况。但是,C++ 不以任何方式保证 IEC 559 已到位(尽管 99.99% 的时间恰好是这种情况,您仍然需要验证以确定) .

IEEE 754-2008 6.1 说:

The behavior of infinity in floating-point arithmetic is derived from the limiting cases of real arithmetic with operands of arbitrarily large magnitude, when such a limit exists. Infinities shall be interpreted in the affine sense, that is: −∞ < {every finite number} < +∞.

Operations on infinite operands are usually exact and therefore signal no exceptions,…

由于 1/x 的极限随着 x 无限制地增加而为零,该子句的结果是 1/∞为零。

6.3条告诉我们结果的符号是+:

When neither the inputs nor result are NaN, the sign of a product or quotient is the exclusive OR of the operands’ signs;…