gpt4 book ai didi

c++ - Eclipse 将鼠标悬停在 C++ 中的变量 VS cout 上

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:50:00 25 4
gpt4 key购买 nike

我正在尝试调试下面的代码

result = 30 / 1000000000.0
rst = result * 1000000000
cout << "rst:" << rst << endl;

但是,当我尝试使用 eclipse 将鼠标悬停在“rst”变量上以检查该值时,eclipse 将显示该值为 29.99999999999...6。但是cout在console打印出来的值是30,为什么会这样呢?这种情况下,程序会取哪个变量继续进行呢?

最佳答案

实际上,两者都没有为您提供存储在 rst 中的二进制值的精确十进制表示。cout 的输出是四舍五入的,来自 Eclipse 的值是四舍五入/截断的,或者是在存储在浮点变量中时会产生相同位模式的值。

我不知道 IEEE 浮点计算的确切规则,但由于 float 的精度有限,任何二进制数(至少有一个小数位)的精确十进制表示必须以 5 结尾,因为 1/2^n 总是类似于 0。... 5 对于任何 n>=0。

首先,这意味着 30/1000000000.0 的精确结果无法用任何浮点类型(甚至 double 类型)准确表示,因此 30/1000000000.0*1000000000.0 不是恒等运算。 (这与十进制中的 1 除以 3 是同一个问题)

其次,这也意味着 29.99999999999...6 不能是存储在 rst 中的任何内容的精确十进制表示。

关于c++ - Eclipse 将鼠标悬停在 C++ 中的变量 VS cout 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30908379/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com