在 C++ 中将 0 添加到 Float/Double 类型

Adding 0 to a Float/Double Type in C++

我听说像 0.1 + 0.2 这样的浮点运算可能会产生像 0.30000000000000004 这样的舍入误差,因为内部使用了二进制浮点数。

但是如果我在 C++ 中给任何浮点数加一个 0,它能保证产生相同的值而没有任何舍入错误吗?我不知道浮点运算如何工作以及何时出现舍入错误。

如果 C++ 实现支持 IEEE754 数学,那么它是有保证的。 IEEE754 标准对数学运算有精确的定义,因此 C++ 没有定义自己的规则。但 IEEE754 支持不是强制性的。

x + 0.0 == x对任何数(*)都成立,因为IEEE754保证加减乘除精确到最后一位。

(*) 当 x 不是数字 (NaN) 时,x+0.0 也是 NaN,但在 IEEE754 中 NaN != NaN