2017-03-31 16 views
-1

man gcc(1):オプション-ffast-mathはプリプロセッサマクロを発生させます__ FAST_MATH__定義します。そのマクロの詳細な文書はありますか?gccプリプロセッサマクロの使用方法__FAST_MATH__?

私は

#define __FAST_MATH__ blabla 
y = pow(x,a); 
#undef __FAST_MATH__ 

のようにそのコードを期待細かい単一のステートメントにダウングレイン、数学の最適化を制御することができます。それらが配置される場所

はしかし、私のテストはかなりかかわらず、
#define __FAST_MATH__ 
#define __FAST_MATH__ on 

はすべて無視されることを示しています。

は、[編集]彼らは「無視」

#include <math.h> 

を意味する前を置かれていても無視されます。測定可能な効果を持っていません。 -Fast-mathはテストコードを3倍に加速しますが、

+0

'-ffast-math'を使用すると、' __FAST_MATH__'が定義されます。それはおそらくそれのすべてであり、それ以上の効果はありません。 – melpomene

+0

ヘッダーmath.hにはどこかの#ifdef __FAST_MATHが含まれていると思いますか?また、私はまだコンパイラ内部の何かが-ffast-mathとは異なった動作をすると思います。 –

+0

答えはhttp://stackoverflow.com/questions/7420665/what-does-gccs-ffast-math-actually-doには、実際にフラグが何をするかに関する多くの情報があります。 –

答えて

1

私はあなたがそれを後方に持っていると信じています。マクロは、標準ライブラリが数学関数の異なる実装を使用するために定義されています。

コンパイラが期待したコードを生成していないときにプログラムがこれらの代替実装を使用しているため、自分で定義することは効果がなく、実際には危険なバグかもしれません。

関連する問題