-freciprocal-math
更改了以下代码
double a = b / c;
到
double tmp = 1/c;
double a = b * tmp;
在GCC手册中,据说这种优化是不安全的,并且不符合IEEE标准。但我想不出一个例子。你能举个例子吗?
答案 0 :(得分:13)
除以10并乘以0.1000000000000000055511151231257827021181583404541015625并不是一回事。
答案 1 :(得分:0)
也许我在想一个不同的编译器标志,但是......
某些处理器具有计算近似倒数的指令。 RCPSS om x86(SIMD指令)浮现在脑海中;它有一个相对误差1.5 * 2 ^ -12。使用该标志可能允许编译器选择一个近似的倒数指令,根据您的应用程序,这可能不安全。
希望这有帮助。