当计算在linux中导致非正规数时,刷新为零

时间:2013-07-31 22:14:06

标签: floating-point ieee-754 underflow

我的C代码中的计算产生逐渐下溢,当它发生时,程序终止于SIGFPE。当逐步下溢(Denormal)由计算产生时,如何将结果刷新为零,而不是终止执行? (我正在使用redhat linux机器)。感谢。

1 个答案:

答案 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标准。