我的C代码中的计算产生逐渐下溢,当它发生时,程序终止于SIGFPE。当逐步下溢(Denormal)由计算产生时,如何将结果刷新为零,而不是终止执行? (我正在使用redhat linux机器)。感谢。
答案 0 :(得分:3)
您尚未指定架构 - 我将猜测它是一个相对较新的x86 [-64],在这种情况下,您可以使用_mm_getcsr
操作SSE控制寄存器,{{1 },在_mm_setcsr
(或<xmmintrin.h>
)标头中指定。
'flush-to-zero'位设置为0x8000,'denormals-are-zero'(输入/ src)设置为0x0040。
<immintrin.h>
或_mm_setcsr(_mm_getcsr() | 0x8040);
(SSE3):
<pmmintrin.h>
这可能会更容易确定下溢的来源,但不应将其视为解决方案,因为FP环境不再符合IEEE-754标准。