問題タブ [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.

0 投票する
1 に答える
6038 参照

gcc - gcc でコンパイル中に -ffast-math オプションが正確に行うこと

gccでコンパイルしたときに -ffast-math オプションが何をするのかを理解するのに役立つ人はいますか? -O3 と -ffast-math を使用して実行した場合、-O3 のみを使用した場合と比較して、プログラムの実行時間に 20 秒の差が見られます

0 投票する
1 に答える
4967 参照

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 によるパフォーマンス改善の機会

0 投票する
2 に答える
6757 参照

gcc - Visual Studio C++ コンパイラに相当する -ffast-math フラグはありますか

/Ox私は、Visual Studio 2013 にフラグ( Full Optimization )が付いたデフォルトの C++ コンパイラ (「Visual Studio C++ コンパイラ」と呼ばれていると思います) を使用しています。浮動小数点の副作用のため、コンパイラ-ffast-mathを使用するときはフラグを無効にする必要があります。gccVisual Studio C++ コンパイラの構成で、このフラグに相当するオプションはありますか?

0 投票する
2 に答える
1605 参照

c - 浮動小数点を多用するコードは、x86 ベースのアーキテクチャでビット単位の正確な結果を生成しますか?

コードの複雑さに関係なく、浮動小数点演算を使用する C または C++ のコードが、x86 ベースのアーキテクチャでビット単位の正確な結果を生成するかどうかを知りたいです。

私の知る限り、Intel 8087 以降の x86 アーキテクチャはすべて、IEEE-754 浮動小数点数を処理するために用意された FPU ユニットを使用しており、異なるアーキテクチャで結果が異なる理由はわかりません。ただし、それらが異なる場合 (つまり、コンパイラまたは最適化レベルが異なるため)、コンパイラを構成するだけでビット単位の正確な結果を生成する方法はありますか?

0 投票する
1 に答える
111 参照

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をチェックしませんが、上記の単純な条件チェックを破る正確な理由は何ですか?