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
- C/C++中判断两个变量是否相等,相减是否为0、大于0或小于0时要特别注意机器误差带来的影响!
- C语言中,整型变量x小于0,是否可知x*2也小于0
- C语言判断两个字符串是否相等
- c语言 判断两个字符串是否相等
- Linux C判断两个IPv6地址是否相等的方法
- 判断两个float或double是否相等
- 判断两个float或double是否相等
- 判断两个(float)变量x,z是否相等 以及和0值比较方法
- 判断两个( float )变量是否相等以及和 0 值比较方法
- 判断两个(float)变量x,z是否相等 以及和0值比较方法
- 判断两个float变量是否相等以及和 0 值比较方法
- 判断两个( float )变量是否相等以及和 0 值比较方法
- js 判断两个变量是否相等
- javascript 判断两个变量是否相等
- js 判断两个变量是否相等
- js 判断两个变量是否相等
- 怎么判断两个cstring变量是否相等?
- C语言判断两个浮点数是否相等
- Ganglia
- 对象的内存布局 (HotSpot)小结
- tasklet_hi_schedule分析
- CentOS时间的查看、设置、修改
- 360 2016暑假实习招聘 一面视频面试
- C/C++中判断两个变量是否相等,相减是否为0、大于0或小于0时要特别注意机器误差带来的影响!
- 实时操作系统延时问题
- Flume
- iOS开发网络篇—GET请求和POST请求
- 在W10系统中怎么打开cpu虚拟化设施
- iOS动态调用Get Set
- 两个ListView实现的Android点餐页面
- JUC源码分析1-原子变量-AtomicInteger/AtomicBoolean/AtomicLong/AtomicReference
- 【知识整理】移动端微信页面禁止字体放大