我听说像0.1 + 0.2这样的浮点运算可能会产生舍入误差,如0.30000000000000004,因为内部使用了二进制浮点数。
但是如果我在C ++中向任何浮点数添加0,它是否保证产生相同的值而没有任何舍入错误?我不知道浮点运算如何工作以及何时出现舍入错误。
答案 0 :(得分:1)
如果 C ++实现支持IEEE754数学,那么它是有保证的。 IEEE754标准具有精确的数学运算定义,因此C ++没有定义自己的规则。但IEEE754支持不是强制性的。
对于任何数字(*), x + 0.0 == x
都是正确的,因为IEEE754保证加法,减法,乘法和除法对最后一位是精确的。
(*)当x不是数字(NaN)时,x+0.0
也是NaN,但IEEE754中是NaN != NaN
。