c++ - 双循环变量 : unspecified or undefined? 的相等条件

标签 c++ precision undefined-behavior unspecified-behavior

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

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/

相关文章:

c++ - 为什么我们可以在 C 中写越界?

c++ - 调整属性表的错误

c++ - 从C++中的文件中删除结构

c# - 如何将自定义结构对象从 C++ COM 组件返回并使用到 C# 应用程序中

Java:在小程序中设置数字的精度

matlab - eps() 在 MATLAB 中是如何计算的?

format - 如何在 IJulia 中选择数字输出格式?

C++ 避免 vector <bool>实例化

c++ - 是否可以假定具有未定义行为的分支无法访问并将其优化为死代码?

c++ - 从成员函数指针转换为另一种类型并返回,严格别名问题?