Tag: fenv

浮点exception – gcc bug?

请考虑以下代码: #include #include int main() { #pragma STDC FENV_ACCESS ON 1.0/0.0; printf(“%x\n”, fetestexcept(FE_ALL_EXCEPT)); } 我希望它打印一个对应于FE_DIVBYZERO的非零值,但它会打印0.将main的第二行更改为double x = 1.0/0.0; 给出了预期的行为。 这是允许的,还是一个bug? 编辑:对于它的价值,起初似乎在大多数现实世界的代码中,可能导致引发fenvexception的操作无法优化,因此可以安全地执行大型计算并在最后检查是否有溢出,div-by-zero等发生了。 但是,当您考虑内联和优化时,事情会变得混乱,并且会出现真正的问题。 如果这样的函数在由于常量参数总是最终除以零的情况下被内联,那么gcc可能会变得非常聪明并优化整个内联函数,主要是为了return INFINITY; 没有提出任何例外。