12

-freciprocal-math在 GCC 中更改以下代码

double a = b / c;

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

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

4

2 回答 2

15

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

于 2012-05-21T03:32:58.000 回答
0

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

一些处理器具有计算近似倒数的指令。想到 x86 的 RCPSS(SIMD 指令);它的相对误差为 1.5 ∗ 2^−12。使用该标志可能允许编译器选择近似倒数指令,根据您的应用程序,这可能不安全。

希望这可以帮助。

于 2012-05-21T11:21:07.907 回答