Alw*_*ing 1 c++ precision undefined-behavior unspecified-behavior
我想直接讲一下术语。考虑:
for (double d = 0.0; d != 1.0; d += 0.1)
cout << d << " ";
Run Code Online (Sandbox Code Playgroud)
如果我理解正确,由于双重运算不精确,因此此循环可以是有限的或无限的。是否认为这是未指定或未定义的行为?
程序的行为是由实现定义的:不同的实现可以具有不同的行为,但是必须对其进行记录。这与未指定的行为(不需要记录)和未定义的行为(所有行为)不同。另请参见未定义,未指定和实现定义的行为。
double
IEEE754定义了的常见实现。如果您的实现遵循该标准,则该循环将始终恢复相同的输出。
在IEEE754下,您的循环是无限的-您将跳过该循环1.0
,最终d
将增长到0.1
无添加操作的大小。