1

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

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

如果我理解正确,由于双重算术不精确,这个循环可以是有限的也可以是无限的。这是否被认为是未指定或未定义的行为?

4

1 回答 1

6

你的程序的行为是实现定义的:不同的实现可以有不同的行为,但他们必须记录它。这与未指定的行为(不需要记录)和未定义的行为(任何事情发生)不同。另请参见未定义、未指定和实现定义的行为

doubleIEEE754 定义了一个常见的实现。如果您的实现遵循该标准,那么该循环将始终恢复相同的输出。

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

于 2019-10-28T09:53:00.460 回答