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

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

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 を使用しています。

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

c - Cのアンダーフローとナンの違いは何ですか?

現在、浮動小数点例外について学んでいます。関数でループを書いています。その関数では、 に等しい値が計算され0.5ます。ループが進むにつれて、入力値は で除算され10ます。

ループ:

関数:

最初の数回の反復で出力が回り0.5、後で0CC になります。しばらくすると、これがプログラムの出力です。

アンダーフローから への遷移で何が起こるか知りたいですNaN。アンダーフローとは、数値が小さすぎてメモリに格納できないことを意味するためです。

しかし、数がすでに小さすぎる場合、の目標はNaN何ですか?

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

c++ - シグナル SIGFPE(div by zero) を常にトリガーするコードを生成する方法は?

ゼロ信号で割った値 (SIGFPE) を常にトリガーする単体テストをコーディングする必要があるため、信号キャッチ モジュールの有無にかかわらず何が起こるかをテストして比較できます。

Linux シグナル キャッチ/レジューム モジュールが開発され、期待どおりに動作しました。モジュールの単体テストをコーディングしているときに、小さな問題が発生します。

これらは UT コードです (GTest による):

すべてのコードがデバッグ モードでビルドされている場合、問題はありません。しかし、除算演算はリリース モードで最適化されます。その結果、SIGFPE シグナルがトリガーされることはありません。

製品コードとテスト コードの一貫性を維持するために、製品をリリースするときにすべてをリリース モードでビルドする必要があります。

シグナル SIGFPE を常にトリガーするコードを作成する方法は?

より「実際の」メソッドが存在する場合は、raise() 関数を使用したくありません。実際に SIGFPE シグナルをトリガーしたいからです。

ありがとう!私の下手な英語を許してください!

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

c++ - clEnqueueNDRangeKernel が浮動小数点例外でクラッシュするのはなぜですか?

clEnqueueNDRangeKernel()C++ プログラム内からを使用して特定のカーネルを起動しようとしています。ただし、エンキューまたはエラーを返す代わりに、浮動小数点例外シグナル (SIGFPE) を受け取ります。

IP 上の理由から、このシグナルをトリガーする例を提供することは困難です。しかし、これが発生する正当な理由はないようです。その関数自体が実際に無効な浮動小数点演算を実行する既知のケースはありますか?