提问人:geza 提问时间:12/18/2018 最后编辑:geza 更新时间:12/18/2018 访问量:222
如何及早发现浮点错误(就在它们发生的地方)?
How to catch floating point errors early (right at where they occur)?
问:
在开发浮点重代码时,启用 FPU 异常非常有用。当操作导致 NaN/inf 时,我们可以立即捕获它。
例如,在 Linux 上,我可以通过以下方式启用此功能:
feenableexcept(FE_DIVBYZERO|FE_INVALID|FE_OVERFLOW);
在上交所之前,这种技术就像一个魅力。然而,今天,对于 SSE,这与(或其他编译器的其他等效选项)相冲突。-ffast-math
原因之一是 sqrt,因为 sqrt 是作为 实现的。当为零时,这将产生异常。当禁用异常时,这不是问题,因为 sqrt 函数会处理此问题。x*rsqrt(x)
x
因此,我无法因此启用异常(也许还有其他原因)。
如果启用,您有什么建议,如何在浮点错误发生的地方及早捕获浮点错误(我不希望 NaN 传播,我也想捕获溢出到无穷大),如果启用?-ffast-math
答: 暂无答案
评论
-fast-math
-march=sandybridge
vsqrtss
-march=nehalem
rsqrt
vsqrtss