判断浮点数是不安全的?
浮点数的比较运算是很不安全的。由于任何浮点数运算都是不精确的,绝对不要比较两个浮点数看它们是否相等。使用二进制浮点数格式,产生数学意义上同样结果的不同运算所产生的结果值可能会在最低有效位上有所不同。例如:1.31e0 + 1.69e0应该得到3.00e0,同样,1.50e0 + 1.50e0也应该得到3.00e0。但是,如果你比较(1.31e0 + 1.69e0)与(1.50e0 + 1.50e0),你可能会发现它们的和并不相等。
但是看这个程序
#include<iostream>
using namespace std;
int main()
{
if((1.31e0 + 1.69e0)==(1.50e0 + 1.50e0))
cout<<"Y";
else cout<<"N";
system("pause");return 0;
}
输出是Y。。。怎么不相等呢??
如果我要判断是否相等怎么办呢??
误差的取值应该为多少? 1E-9??
[解决办法]
所谓不安全不是说每次都不等,其实里面有很多还是相等的。但问题是它不能保证一定是相等的,完全有可能在最低位上有那么一点点差别,结果,比较失败。
你试试这个(24.4-14.4)/10.0==1.0
[解决办法]
如果你需要判断是否相等,可以这么写:
fabs((da-db)/db)<0.0000001
多少个0看你的需要了。