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