- 在C/C++浮点代码中始终使用feenableexcept()来捕获除以零、无效操作和溢出等异常。
- 默认情况下,ISO C会静默允许无穷大和NaN,它们可能会传播并在计算中产生未检测到的错误结果。
- 在Linux上使用-lm时,使用feenableexcept(FE_DIVBYZERO | FE_INVALID | FE_OVERFLOW)会在可疑操作时触发SIGFPE,从而为了安全而崩溃程序。
- 编译器优化(如SIMD)可能会被异常捕获所抑制;启用-fno-trapping-math允许优化,但无法使用feenableexcept()。
- 还存在其他异常FE_UNDERFLOW和FE_INEXACT;FE_INEXACT很常见,通常对调试没有用处。