1

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