浮点异常-gcc错误?
|
考虑以下代码:
#include <fenv.h>
#include <stdio.h>
int main()
{
#pragma STDC FENV_ACCESS ON
1.0/0.0;
printf(\"%x\\n\", fetestexcept(FE_ALL_EXCEPT));
}
我希望它会打印一个对应于ѭ1corresponding的非零值,但它会打印0。将main
的第二行更改为double x = 1.0/0.0;
可以得到预期的行为。这是允许的,还是错误?
编辑:对于它的价值,起初似乎在大多数现实世界代码中,可能导致fenv异常引发的操作无法进行优化,因此可以安全地执行大型计算并检查结束是否发生任何溢出,零除等。但是,当您考虑进行内联和优化时,事情会变得一团糟,并且出现了一个真正的问题。如果这样的函数在由于常数参数而最终总是被零除的情况下被内联,则gcc可能会变得非常聪明,并在不引发任何异常的情况下将整个内联函数实质上优化为4。
没有找到相关结果
已邀请:
5 个回复
bab
磐乓铝举
晤默报
进行编译时表示:
根据GCC信息页面:
不幸的是,ѭ8对您的程序似乎没有任何影响。 可以说是编译器错误;我想问一个GCC邮件列表。
墩瓣茅械
咳累录酬
来重现您的结果,但是如果我转到
则在两种情况下我都得到0。