浮点数加法的结合性问题?

9000000000.0f + 1.0f - 9000000000.0f != 1.0f
■网友
C/C++基本法并不保证浮点数加法运算满足结合律或者是交换律。浮点数的运算误差控制应该交由程序编写者通过组织运算语句完成,编译器不应该随便进行处理,以免引入意想不到的误差。比如 x = -1e100 + 1e100 + 1 本来会得到1,如果按t = 1e100 + 1; x = -1e100 + t算结果就会变成0。事实上浮点数运算不要说结合性,就连if(a + b == a + b)都不能随便优化成if(1)
■网友
没理由认为编译器会这样优化,语义都不一样。而且,与浮点不浮点无关


    推荐阅读