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

问题描述 投票:1回答:1

我想直接讲术语。考虑:

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

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

c++ precision undefined-behavior unspecified-behavior
1个回答
6
投票

您的程序的行为为implementation defined:不同的实现可以具有不同的行为,但是必须对其进行记录。这不同于unspecified behavior(不需要记录)和undefined behavior(任何内容)。另请参阅Undefined, unspecified and implementation-defined behavior

double的通用实现由IEEE754定义。如果您的实现遵循该标准,则该循环将始终恢复相同的输出。

[在IEEE754下,您的循环是无限的-您将跳过1.0,最终d的大小将增加到不能添加0.1的程度。

© www.soinside.com 2019 - 2024. All rights reserved.