2016-10-21 15 views
9

GCCでは、-ffast-mathを有効にして浮動小数点計算を高速化します。我々がNaNとInfの浮動小数点値の適切な動作に依存しているとしてではなく、我々はまた、-fno-finite-math-onlyをオンにし、その値を取ることの最適化は、MSVCの場合はNaN/InfのはGCCの-fno-finite-math-onlyに相当するMSVC?

-ffast-mathと「同等」とは明らかに/fp:fastではありません。しかし、GCCの-ffast-mathと同様に、also includesはNan/Infが存在しないと仮定した最適化です。 (正確には、std :: isnan()のようなテストでは「正確な」結果が得られるとは限りません)。

/fp:fastのほとんどの最適化を利用できるMSVC C++コンパイルのオプションはありますか? NaNとInfの値を「適切に」扱っていますか? (または非常に少なくとも、保証それはstd :: ISNANのようなテスト()/ STD :: ISINF()、彼らが生成することが起こるならばNaNに/ Infのを検出します。)GCCとは異なり

+0

ほとんどのあなたは、このようなスイッチを見つけることができません。私が知る限り、コンパイラに追加された各スイッチは、マイクロソフト側のテスト努力を2倍にします。そのため、今では新しいスイッチを追加することに非常に嫌気がされています。 – stgatilov

答えて

1
guarantees that tests like std::isnan()/std::isinf() 

、MSVC( CL RC 19)は、実際に/fp:fast設定にstd::isnanを最適化しません:

て最適化することはありませんもう一つの選択肢は、C99 isnanまたはMSVC固有_isnanfを呼び出すことです。または、std::numeric_limits::quiet_NaNで生成できる既知のビットマスクに対して独自のnanテストを実行します。

参照: https://godbolt.org/g/YdZJq5

関連する問題