問題タブ [sigfpe]
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.
c++ - C++ 設定浮動小数点例外環境
std::fenv をポータブルな方法で設定しようとして苦労しています。
このcppreference ページに基づいて、それはfesetexceptflag(const std::fexcept_t*,int)
私がトリックを行うのに役立つはずです. 一方で、GNU にもそのfeenableexcept(int)
機能があることを知りました。私の理解では、それfeenablexcept
はGNU固有のものであり、常にGNUのものにアクセスできる可能性が非常に高いですが、stdのものだけを使用したいと思っていましたfesetexceptflag
。私は小さなテストを書きましたが、feenableexcept
アプローチは機能しますが、fesetexceptflag
機能しないことがわかりました。2 つの例を次に示します。fesetexceptflag
バージョン 1 ( ) とバージョン 2 ( feenableexcept
)を取得するには、main の先頭にある 2 行のコメントを入れ替えます。
バージョン 1 の出力:
バージョン 2 の出力:
したがって、バージョン 1 は fenv で例外フラグを正しく設定しているように見えますが、SIGFPE の発生に失敗しますが、バージョン 2 は例外フラグを設定しませんが、SIGFPE を発生させます。ここで何が起こっているのですか?のドキュメントを誤解していますfesetexceptflag
か? 私の理解では、2番目の引数でアクティブな最初の引数のすべてのビットを取得し、それらをfenvに入れます(これが起こるようです)。しかし、それでは効果がないようです。一方、バージョン 2 はマスク fenv が 0 ですが、SIGFPE を上げることに成功しています。私はとても混乱しています。
Linux マシン (Red Hat) で gcc 8.2.0 を使用しています。
c - Cのアンダーフローとナンの違いは何ですか?
現在、浮動小数点例外について学んでいます。関数でループを書いています。その関数では、 に等しい値が計算され0.5
ます。ループが進むにつれて、入力値は で除算され10
ます。
ループ:
関数:
最初の数回の反復で出力が回り0.5
、後で0
CC になります。しばらくすると、これがプログラムの出力です。
アンダーフローから への遷移で何が起こるか知りたいですNaN
。アンダーフローとは、数値が小さすぎてメモリに格納できないことを意味するためです。
しかし、数がすでに小さすぎる場合、の目標はNaN
何ですか?
c++ - シグナル SIGFPE(div by zero) を常にトリガーするコードを生成する方法は?
ゼロ信号で割った値 (SIGFPE) を常にトリガーする単体テストをコーディングする必要があるため、信号キャッチ モジュールの有無にかかわらず何が起こるかをテストして比較できます。
Linux シグナル キャッチ/レジューム モジュールが開発され、期待どおりに動作しました。モジュールの単体テストをコーディングしているときに、小さな問題が発生します。
これらは UT コードです (GTest による):
すべてのコードがデバッグ モードでビルドされている場合、問題はありません。しかし、除算演算はリリース モードで最適化されます。その結果、SIGFPE シグナルがトリガーされることはありません。
製品コードとテスト コードの一貫性を維持するために、製品をリリースするときにすべてをリリース モードでビルドする必要があります。
シグナル SIGFPE を常にトリガーするコードを作成する方法は?
より「実際の」メソッドが存在する場合は、raise() 関数を使用したくありません。実際に SIGFPE シグナルをトリガーしたいからです。
ありがとう!私の下手な英語を許してください!
c++ - clEnqueueNDRangeKernel が浮動小数点例外でクラッシュするのはなぜですか?
clEnqueueNDRangeKernel()
C++ プログラム内からを使用して特定のカーネルを起動しようとしています。ただし、エンキューまたはエラーを返す代わりに、浮動小数点例外シグナル (SIGFPE) を受け取ります。
IP 上の理由から、このシグナルをトリガーする例を提供することは困難です。しかし、これが発生する正当な理由はないようです。その関数自体が実際に無効な浮動小数点演算を実行する既知のケースはありますか?