Eclipse 悬停在 c++ 中的变量 VS cout 上
Eclipse hover over variable VS cout in c++
我正在尝试调试以下代码
result = 30 / 1000000000.0
rst = result * 1000000000
cout << "rst:" << rst << endl;
但是,当我尝试将鼠标悬停在带有 eclipse 的"rst"变量上以检查值时,eclipse 将显示值为 29.99999999999...6。但是在带有 cout 的控制台中打印的值是 30。为什么会这样?在这种情况下,程序将采用哪个变量来进一步进行?
实际上,两者都没有为您提供存储在rst
中的二进制值的精确十进制表示形式。cout
的输出是舍入的,Eclipse 中的值要么是舍入/截断的,要么是存储在浮点变量中时会导致相同位模式的值。
我不知道IEEE浮点计算的确切规则,但由于浮点数的精度有限,任何二进制数(至少有一个小数位数)的精确十进制表示必须以5结尾,因为1/2^n总是像0。5 表示任何 n>=0。
首先,这意味着 30/1000000000.0的精确结果无法由任何浮点类型(甚至不是双精度型)准确表示,因此,30/1000000000.0*1000000000.0 不是标识操作。(这与十进制系统中的 1 除以 3 是相同的问题)
其次,这也意味着 29.99999999999...6 不能是存储在 RST 中的任何内容的精确十进制表示形式。
相关文章:
- vs 2015 constexpr变量不恒定,但与2019相比还好吗
- Visual C++: MSVC vs. GCC+CLANG: 处理 lambda 捕获类成员变量,正确的方法是什么?
- *&vs & 将变量传递给函数
- C++不正确,不需要重新声明类成员变量 MFC 手工解决方案/项目 MS VS 2015
- C vs 2017设置全局变量 - 程序仅在调试中使用断点
- 如果Constexpr - clang vs.GCC,则非constexpr变量
- 在VS代码中使用全局变量时出现"undefined reference to"错误
- VS 中的 C++ 17 会导致 C++14 中不存在的变量(重新)评估错误
- OpenACC vs C++:致命错误:设备上部分存在变量
- VS 2017告诉我我正在尝试转换变量,但我没有
- 返回一个C++引用变量 VS 返回一个变量
- const vs non-const变量一旦分配就没有变化
- 基本数据类型变量 VS 对象变量
- 基类中的单个受保护成员变量VS派生类中的多个私有成员变量
- 静态constexpr变量vs函数
- 变量vs长算法
- 创建对象,局部变量vs右值引用
- Lambda函数捕获变量vs返回值
- Eclipse 悬停在 c++ 中的变量 VS cout 上
- c++性能:局部变量vs数据成员