C/C++中判断两个变量是否相等,相减是否为0、大于0或小于0时要特别注意机器误差带来的影响!

来源:互联网 发布:mac能玩gta5 编辑:程序博客网 时间:2024/04/29 08:45

先上有问题的程序图:



理论上 S[50]和G[60]应该是相等的,所以(G[j] - S[i]) >= 0应该是满足的,但实际上根据上面内存变量跟踪值,G[j] - S[i]是小于0的,所以导致语句:

( (G[j] - S[i]) < min_val && (G[j] - S[i]) >= 0)的值为False,这样程序就不是我们预期的!

解决方法是使用如下的代码:

int temp1;double temp2;temp1=val_1*100;temp2=temp1;val_1=temp2/100;temp1=val_2*100;temp2=temp1;val_2=temp2/100;S[index] = val_1;G[index] = val_2;
应该不用解释了,一看便知道是怎么回事!运行结果如下图所示:



2016-4-29日,即写这篇博文的第二天,我发现实际程序实际处理图像时,根本不需要考虑这个问题,因为实际的图像都很大,都是上万个像素,这样一来,你把直方图的面积归到一的过程中,那个分母,即像素个数是很大的,且不是啥整数,不会像我的例子是5,此时根本不能整除,而且除出来后面一长串小数,甚至有些啊小数后面几位开始才有非0数字数出,比如0.00001355这样的数,所以你基本不用去考虑相等的情况发生了!上面要那样处理是因为太特殊了!如果程序都照上面那样处理,那才出大问题了,因为这样一来你会舍弃很多有效数字啊!而这些数字都是有效的,所以不用处理!

0 0
原创粉丝点击