浮点数比较的问题
浮点数好象不能用(==) 和(!=)比较。
那怎么判断两个浮点数是否相等?怎么判断一个浮点数是否等于0?
问题点数:60、回复次数:9Top
1 楼humourHM(小鬼)回复于 2005-08-03 00:03:35 得分 0
可以判断相减结果是否为0啊Top
2 楼i_noname(晚九朝五)回复于 2005-08-03 00:38:26 得分 0
判断浮点数最好不要用=来判断,用下面的方法。
double a, b;
...
if (a - b >= 0.0000001) //看你的精度要求了
...;
看是否为0也是用
if (a <= 0.00000001)Top
3 楼thisisll(学习王高李,有个好身体)回复于 2005-08-03 08:18:59 得分 0
学习Top
4 楼ricky20045(热情的沙漠)回复于 2005-08-03 08:22:33 得分 0
顶一下Top
5 楼RedProgramer(TST : RedSteel)回复于 2005-08-03 08:29:21 得分 0
因为浮点数很少会有绝对的零出现,所以应该用i_noname(一觉睡到大天黑) 的方法Top
6 楼happyparrot(快乐鹦鹉)回复于 2005-08-03 08:29:49 得分 0
判断是否为0,可以用:
float a;
if(abs(a) < 0.0000001)
{
AfxMessageBox("a=0");
}Top
7 楼happyparrot(快乐鹦鹉)回复于 2005-08-03 08:30:42 得分 0
因该用浮点数的绝对值无限接近0的原则来判断是否为0,不能仅用浮点数Top
8 楼younggle(洋溢)回复于 2005-08-03 08:55:11 得分 0
正如楼主所说,浮点数是不能使用 == 和 != 直接进行比较的。
而是要使用‘逼近法’进行比较的。
判断a是否为0,可以用:
const float MIN_ERROR = 0.0000001;
float a;
......
if(fabs(a) < MIN_ERROR)
{
//a 近似等于 0
}
Top
9 楼qrlvls( 空 气 )回复于 2005-08-03 09:00:08 得分 0
浮点数表示法的限制,这种方法在浮点数经过运算后不一定准确
根据浮点数的表示方法,你只需要为一个浮点数赋值
float f = 0.0f;
if (memcmp((void*)&fDest, (void*)&f, 4) == 0)
printf("相等");
else
printf("不相等");
对于 double,只需要把 4 换成 8 就可以了
如果用到了 IEEE 80位 浮点数表示法的话就比较麻烦了
Top




