Hasty Briefsbeta

双语

Always use feenableexcept() when doing floating point math - Bert Hubert's writings

a day ago
  • 在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很常见,通常对调试没有用处。