【发布时间】:2014-02-04 22:54:03
【问题描述】:
我重复相同的计算两次,但在一次我得到一个浮点异常,而在另一次我没有。
#include <iostream>
#include <cmath>
#include <fenv.h>
using namespace std;
int main(void)
{
feenableexcept(-1);
double x,y,z;
x = 1.0;
y = (1.0/(24.3*24.0*3600.0))*x;
cout << "y = " << y << endl;
z = x/(24.3*24.0*3600.0);
cout << "z = " << z << endl;
return 0;
}
我在 g++ 和 clang++ 上都对其进行了测试,并在两者中都得到了以下输出
y = 4.76299e-07
Floating point exception
发生了什么事?
【问题讨论】:
-
什么平台/编译器? (这里可以,比如:ideone.com/SYmWam)
-
我的猜测是,在前面的计算中,除法是在编译时完成的,只剩下乘法。在后一种情况下,除法是在运行时完成的。编译器是否使用不同的算术?你在交叉编译吗?
-
没有声明
feenableexcept(-1);它工作正常。感觉与功能有关。我不知道它在做什么:(