c语言中数大小的比较问题

麻烦大家看一看:

#include<stdio.h>
void main()
{float x,y=0.6;
y=y*11;
x=6+0.6;
if(x==y) printf("OK",x==y\n);
else printf("NO,x!=y\n);
}
为什么运行结果为 NO,x!=y?

我是自学者,准备上大学。麻烦大哥大姐尽量详细。不胜感激。

因为float的精度问题,一般浮点数的比较大小是没法用==和!=来比较的...
有可能由于计算中丢失了精度,比如你的计算结果为x=6.6000001,而你的y=6.5999999,计算机会认为他们是不相等的,你想进行浮点数的比较,只能让他精确到几个小数点,比如让x-y<0.000001就相等,否则不相等...这样就让浮点数比较精确到小数点第6位了,下面是改过的程序:
#include<stdio.h>
void main()
{
float x,y=0.6;
y=y*11;
x=6+0.6;
if(x-y<0.000001) printf("OK,x==y\n");
else printf("NO,x!=y\n");
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-08-11
程序有错误,判断语句那里少了个括号。类型用double。
改过后的程序:
#include<stdio.h>
void main()
{
double x,y;
y=0.6;
y=y*11;
x=6+0.6;
{
if(x==y)
printf("ok x==y\n");
else
printf("no x!=y\n");
}
}
第2个回答  2010-08-11
浮点类型不能像整型那样直接做等于比较的

要比较两个浮点型是否相等,要这样

if (a - b < 0.000001 || b - a < 0.000001)
第3个回答  2010-08-11
一楼的肯定不对,改成=就成了赋值了,就没有判断性可言

楼主定义的是float类型

楼主将11改成11.0

6改成6.0
第4个回答  2010-08-11
将if(x==y) printf("OK",x==y\n);的改为if(x=y) printf("OK",x==y\n);
试下