gez*_*eza 5 c++ floating-point
在开发大量浮点代码时,启用 FPU 异常非常有用。当运算结果为 NaN/inf 时,我们可以立即捕获它。
例如,在 Linux 上,我可以通过以下方式启用此功能:
feenableexcept(FE_DIVBYZERO|FE_INVALID|FE_OVERFLOW);
Run Code Online (Sandbox Code Playgroud)
在 SSE 出现之前,这种技术非常有效。然而,今天,对于 SSE,这与-ffast-math(或其他编译器的其他等效选项)发生冲突。
原因之一是 sqrt,因为 sqrt 是作为x*rsqrt(x). x当为零时,这会产生异常。当禁用异常时,这不是问题,因为 sqrt 函数可以处理此问题。
因此,我无法因此启用异常(也许还有其他原因)。
您有什么建议,如何在浮点错误发生的地方尽早捕获浮点错误(我不希望 NaN 传播,并且我也想捕获溢出到无穷大)(如果-ffast-math启用)?
| 归档时间: |
|
| 查看次数: |
223 次 |
| 最近记录: |