Eclipse 悬停在 c++ 中的变量 VS cout 上

Eclipse hover over variable VS cout in c++

本文关键字:变量 VS cout 悬停 c++ Eclipse      更新时间:2023-10-16

我正在尝试调试以下代码

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 中的任何内容的精确十进制表示形式。