12

-freciprocal-mathGCCでは、次のコードを変更します

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 に答える