开卷有益旧版本7.1:C语言中两个DOUBLE型变量的比较问题

来源:百度文库 编辑:杭州交通信息网 时间:2024/05/03 06:12:47
为什么第二个输出的是 a!= b ??

#include <iostream.h>
#include <WINDOWS.H>
#include <string.h>
#include <stdio.h>
#include <LIMITS.H>
#include <FLOAT.H>

void main()
{
int i;
double a=2.001;
double b=3.001;
double c=1.0;

for(i=0;i<10;i++)
{
if((b-a)==c)
printf("a==b\n");
else
printf("a!=b\n");
a += c;
b += c;
}
}

计算机里的浮点数没有笔算那么精确,它的1.0也许是0.9999999993或者是1.00000000004,不能够做精确的相等判断,所以不能写if((b-a)==c),b-a的结果除非在取有效数字的时候正好近似成c,否则就不会等于c了,你应该相对自己所关注的有效数字,允许多几位有效数字的偏差,譬如这个程序中,当(b-a)和c相差在0.00001以内时可以认为他们相等。具体的允许偏差的位数应该视情况而定。

这个程序里可以这么写if((b-a-c)>=-0.00001 && (b-a-c)<=0.00001)

顺便给你看一下我用VC单步跟踪得到的几组a和b的值

2.001 3.001
3.001 4.0009999999999994
4.0009999999999994 5.0009999999999994
5.0009999999999994 6.0009999999999994
6.0009999999999994 7.0009999999999994
7.0009999999999994 8.001
……
下面就不列了。

这是一个编程,就是这样的编的啊?(!=)的意思是不等于的意思啊!(==)则是等于的意思啊!这是语句潜套,基本意思你应该明白,也就是如果符合条件输出a=b,否则输出a不等于b.

"!=","<>",以后见到这些就是不等于