1

C コードの計算で段階的なアンダーフローが発生し、それが発生すると、プログラムは SIGFPE で終了します。計算の結果として段階的なアンダーフロー (Denormal) が発生した場合、結果をゼロにフラッシュし、実行を終了しないようにするにはどうすればよいですか? (私は redhat Linux マシンで作業しています)。ありがとう。

4

1 に答える 1

3

アーキテクチャを指定していません - 比較的最近の x86[-64] であると推測します。この場合、 (または) ヘッダーで指定された ,_mm_getcsrを使用して SSE 制御レジスタを操作できます。_mm_setcsr<xmmintrin.h><immintrin.h>

「flush-to-zero」ビットは 0x8000 で設定され、「denormals-are-zero」(入力 / src 用)は 0x0040 で設定されます。

_mm_setcsr(_mm_getcsr() | 0x8040);または<pmmintrin.h>(SSE3) を使用:

_mm_setcsr(_mm_getcsr() | (_MM_FLUSH_ZERO_ON | _MM_DENORMALS_ZERO_ON));

これにより、アンダーフローの原因を特定しやすくなる可能性がありますが、FP 環境は IEEE-754 に準拠していないため、これを解決策と見なすべきではありません。

于 2013-08-01T11:35:41.767 に答える