听说像0.1 + 0.2这样的浮点算术可能会由于内部使用二进制浮点而产生如0.30000000000000004的舍入误差。
但是,如果我在C ++中的任何浮点数上加上0,是否可以保证产生相同的值而不会出现舍入错误?我不知道浮点算法的工作原理以及出现舍入错误的时间。
如果C ++实现支持IEEE754数学,则可以保证。IEEE754标准具有精确的数学运算定义,因此C ++并未定义其自己的规则。但是IEEE754支持不是强制性的。
x + 0.0 == x
对于任何数字(*)都是正确的,因为IEEE754保证加法,减法,乘法和除法精确到最后一位。
(*)当x不是数字(NaN)时,x+0.0
它也是NaN,但NaN != NaN
在IEEE754中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句