为什么 - GCC中的-freciprocal-math不安全?

时间:2012-05-21 03:18:34

标签: c math gcc compiler-construction precision

GCC中的

-freciprocal-math更改了以下代码

double a = b / c;

 double tmp = 1/c;
 double a = b * tmp;

在GCC手册中,据说这种优化是不安全的,并且不符合IEEE标准。但我想不出一个例子。你能举个例子吗?

2 个答案:

答案 0 :(得分:13)

除以10并乘以0.1000000000000000055511151231257827021181583404541015625并不是一回事。

答案 1 :(得分:0)

也许我在想一个不同的编译器标志,但是......

某些处理器具有计算近似倒数的指令。 RCPSS om x86(SIMD指令)浮现在脑海中;它有一个相对误差1.5 * 2 ^ -12。使用该标志可能允许编译器选择一个近似的倒数指令,根据您的应用程序,这可能不安全。

希望这有帮助。