-freciprocal-math
更改了以下代码
double a = b / c;
到
double tmp = 1/c;
double a = b * tmp;
在GCC手册中,据说这样的优化是不安全的,并且不遵守IEEE标准。但我想不出一个例子。你能举个例子吗?
除以 10 和乘以 0.1000000000000000055511151231257827021181583404541015625 不是一回事。
也许我正在考虑不同的编译器标志,但是......
一些处理器有计算近似倒数的指令。 我想到了 x86(SIMD 指令)的 RCPSS;它的相对误差为 1.5 ∗ 2^−12。 使用该标志可能允许编译器选择近似相反的指令,这可能不是一个安全的事情,具体取决于您的应用程序。
希望这有帮助。