【发布时间】:2025-11-25 19:25:01
【问题描述】:
我看过很长的文章解释如何存储浮点数以及这些数字的算术是如何完成的,但是请在我写的时候简要解释一下为什么
cout << 1.0 / 3.0 <<endl;
我看到 0.333333,但是当我写的时候
cout << 1.0 / 3.0 + 1.0 / 3.0 + 1.0 / 3.0 << endl;
我看到 1。
计算机是如何做到这一点的?请解释这个简单的例子。这对我来说已经足够了。
【问题讨论】:
-
这听起来是个好消息,不是吗?
-
@close voters:我在这个问题中没有看到任何离题或过于宽泛的内容。如果你这样做,请在 cmets 中解释自己。
-
我很惊讶是什么让这四位亲近的选民也生气了:)!
-
顺便说一句,几乎每个答案都错了。大多数答案都假设 FPU 得到了错误的位,但输出转换四舍五入到正确的值。一点也不真实。在十进制和二进制中,有理但重复的分数 1/3 不能精确表示,但是当添加两次时,它确实会四舍五入到完全正确的答案。许多答案出错的地方:这个舍入发生在最后一个操作中,第二个加法,它发生在最低有效位(2**-23 或 2**-53)位。无论输出转换如何完成,它都会产生精确的 1.0 (0x3f800000)。
标签: c++ math floating-point ieee-754