我的 C 代码中的计算正在产生逐渐下溢,当它发生时,程序以 SIGFPE 终止。当计算导致逐渐下溢(非正常)而不终止执行时,如何将结果刷新为零?(我正在使用 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 回答