如何尽早(在发生错误的地方)捕捉浮点错误?

时间:2018-12-17 20:22:48

标签: c++ floating-point

在开发浮点重型代码时,启用FPU异常非常有用。当操作导致NaN / inf时,我们可以立即捕获它。

例如,在Linux上,我可以通过以下方式启用它:

feenableexcept(FE_DIVBYZERO|FE_INVALID|FE_OVERFLOW);

在SSE之前,这项技术就像一种魅力。今天,对于SSE,这与-ffast-math(或其他编译器的其他等效选项)冲突。

原因之一是sqrt,因为sqrt被实现为x*rsqrt(x)。当x为零时,这会产生异常。禁用异常时,这不是问题,因为sqrt函数可以处理此问题。

因此,由于这个原因,我无法启用例外(也许还有其他原因)。

您是否有任何建议,如何在发生错误的地方尽早捕获浮点错误(我不希望NaN传播,我也想捕获溢出到无穷大),如果-ffast-math已启用?

0 个答案:

没有答案