我想直接了解术语。考虑:
for (double d = 0.0; d != 1.0; d += 0.1)
cout << d << " ";
如果我没理解错的话,由于 double 算法是不精确的,这个循环可以是有限的也可以是无限的。这是否被视为未指定或未定义的行为?
最佳答案
你程序的行为是implementation defined :不同的实现可以有不同的行为,但他们必须记录它。这不同于 unspecified behavior (无需记录)和 undefined behavior (什么都可以)。另见 Undefined, unspecified and implementation-defined behavior .
double
的常见实现由 IEEE754 定义。如果您的实现遵循该标准,那么该循环将始终恢复相同的输出。
您的循环在 IEEE754 下是无限的 - 您将跳过 1.0
并且最终 d
将增长到添加 0.1
的大小空操作。
关于c++ - 双循环变量 : unspecified or undefined? 的相等条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58588680/