双循环变量的相等条件:未指定或未定义?

Equality condition on a double loop variable: unspecified or undefined?

我想直接了解术语。考虑:

for (double d = 0.0; d != 1.0; d += 0.1)
    cout << d << " ";

如果我没理解错的话,由于double算法是不精确的,这个循环可以是有限的也可以是无限的。这是否被视为未指定或未定义的行为?

您的程序的行为是 implementation defined: Different implementations can have different behavior, but they must document it. This is different from unspecified behavior (need not be documented) and undefined behavior (anything goes). See also Undefined, unspecified and implementation-defined behavior

double 的常见实现由 IEEE754 定义。如果您的实施遵循该标准,那么该循环将始终恢复相同的输出。

您的循环在 IEEE754 下是无限的 - 您将跳过 1.0,最终 d 将增长到添加 0.1 是无操作的大小。