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

时间:2016-07-18 08:50:31

标签: precision floating-accuracy

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

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

1 个答案:

答案 0 :(得分:1)

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

对于任何数字(*),

x + 0.0 == x都是正确的,因为IEEE754保证加法,减法,乘法和除法对最后一位是精确的。

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