問題タブ [fast-math]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
gcc - gcc でコンパイル中に -ffast-math オプションが正確に行うこと
gccでコンパイルしたときに -ffast-math オプションが何をするのかを理解するのに役立つ人はいますか? -O3 と -ffast-math を使用して実行した場合、-O3 のみを使用した場合と比較して、プログラムの実行時間に 20 秒の差が見られます
c++ - std::isinf は -ffast-math では機能しません。無限を調べる方法
サンプルコード:
を使用-ffast-math
すると、そのコードは "0, 0, 1, 1" を出力します。使用しない場合は、"1, 1, 1, 1" を出力します。
あれは正しいですか?std::isinf
/はこれらの場合std::isnan
でも機能するはずだと思いました。-ffast-math
また、どうすれば無限大/NaNをチェックでき-ffast-math
ますか? これを行っていることがわかり、my_isnan
実際に機能しますが、そのソリューションはもちろんアーキテクチャに大きく依存しています。また、なぜmy_isnan
ここで機能し、std::isnan
機能しないのですか? __isnan
とはどうですか__isinf
。彼らはいつも働いていますか?
では、と-ffast-math
の結果は何ですか。未定義になるか、NaN / -Inf にするか。std::sqrt(-1.0)
std::log(0.0)
関連する議論: (GCC) [バグ libstdc++/50724] 新規: g++ の -ffinite-math-only によって isnan が壊れる、(Mozilla) バグ 416287 - isNaN によるパフォーマンス改善の機会
gcc - Visual Studio C++ コンパイラに相当する -ffast-math フラグはありますか
/Ox
私は、Visual Studio 2013 にフラグ( Full Optimization )が付いたデフォルトの C++ コンパイラ (「Visual Studio C++ コンパイラ」と呼ばれていると思います) を使用しています。浮動小数点の副作用のため、コンパイラ-ffast-math
を使用するときはフラグを無効にする必要があります。gcc
Visual Studio C++ コンパイラの構成で、このフラグに相当するオプションはありますか?
c - 浮動小数点を多用するコードは、x86 ベースのアーキテクチャでビット単位の正確な結果を生成しますか?
コードの複雑さに関係なく、浮動小数点演算を使用する C または C++ のコードが、x86 ベースのアーキテクチャでビット単位の正確な結果を生成するかどうかを知りたいです。
私の知る限り、Intel 8087 以降の x86 アーキテクチャはすべて、IEEE-754 浮動小数点数を処理するために用意された FPU ユニットを使用しており、異なるアーキテクチャで結果が異なる理由はわかりません。ただし、それらが異なる場合 (つまり、コンパイラまたは最適化レベルが異なるため)、コンパイラを構成するだけでビット単位の正確な結果を生成する方法はありますか?
c++ - -ffast-math オプションがブール条件を破る理由
これは問題を引き起こすプログラムのクリティカル セクションであり、プログラムは完全にシーケンシャルです。
exist_
はクラスのbool
プライベート メンバーでありdbl_num_
、クラスのdouble
プライベート メンバーです
オプション -ffast-math を使用すると、「0 0 5」という出力が得られました
オプション -ffast-math を指定しないと、"0 0 NAN" という出力が得られました
さらに、プログラムを次のように変更すると
オプション -ffast-math を使用すると、「0 0 NAN」になりました
NANを-5に変更するよりも
オプション -ffast-math を使用すると、「0 0 -5」が得られました
-ffast-math がIEEE標準に違反していることは知っていましたが、NANをチェックしませんが、上記の単純な条件チェックを破る正確な理由は何ですか?