我想直接讲术语。考虑:
for (double d = 0.0; d != 1.0; d += 0.1)
cout << d << " ";
如果我理解正确,由于双重运算不精确,因此该循环可以是有限的或无限的。是否认为这是未指定或未定义的行为?
您的程序的行为为implementation defined:不同的实现可以具有不同的行为,但是必须对其进行记录。这不同于unspecified behavior(不需要记录)和undefined behavior(任何内容)。另请参阅Undefined, unspecified and implementation-defined behavior。
double
的通用实现由IEEE754定义。如果您的实现遵循该标准,则该循环将始终恢复相同的输出。
[在IEEE754下,您的循环是无限的-您将跳过1.0
,最终d
的大小将增加到不能添加0.1
的程度。