本文主要是介绍两个浮点数相等比较,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
你想问的是这个: 浮点数判断需要注意,float 和double 的精度范围,超过范围的数字会被忽略 (1) 浮点数大小判断 如果没有等号关系在里面,也就必然一大一小,那么直接用 > 或者 < (2) 浮点数相等判断 因为 浮点数在内存中存放,可能无法精确的储存,所以同一个值,可能有不同的内存数据,所以要使用以下的方法: 以float 为例,32位APP中精度为 6-7,所以取 1e-7。 两个数字 A 、 B, if ( |A-B| <1e-7 ) 则 A、B相等。
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理
关注 zcdabing zcdabing 本版等级:
#8 得分:0 回复于: 2014-04-03 13:25:34
我记得是 a-b>0.0000001并且b-a>0.0000001 a等于b if(a==b)这么做是不对的,应为这俩也不是个精确值
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理
关注 wstlrh 浅色夏沫 本版等级:
#9 得分:0 回复于: 2014-04-03 13:38:11
如果不判断相等就是直接比较就可以,如果要判断相等就做减法,如果结果在一个合理误差范围内就认为是相等的。。。是这么理解么?
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理
关注 TBWood 欲穷千里目_ 本版等级:
#10 得分:0 回复于: 2014-04-03 13:44:55
引用 9 楼 wstlrh 的回复: 如果不判断相等就是直接比较就可以,如果要判断相等就做减法,如果结果在一个合理误差范围内就认为是相等的。。。是这么理解么?
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理
关注 dbzhang800 dbzhang800 本版等级:
#11 得分:0 回复于: 2014-04-03 13:48:28
引用 9 楼 wstlrh 的回复: 如果不判断相等就是直接比较就可以,如果要判断相等就做减法,如果结果在一个合理误差范围内就认为是相等的。。。是这么理解么? 对,但是这个误差和你的程序有关,前面有人给的 e-6/e-7都是有条件的,比如你需要的是e-30/e-15 都有可能。
--
题外,其实不是不能直接用 == 比较大小,而是float运算后会有误差,你希望两个有一定误差的值相等。
比如下面的代码,由于0.1在二进制的世界中不能精确存储,累加后的b 并不是严格等于1
1
2
3
4
5
6
7
8
double
a = 1;
double
b = 0;
for
(
int
i=0; i<10;++i)
b += 0.1;
if
(a == b)
printf
(
"true\n"
);
else
printf
(
"flase\n"
);
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理
关注 dbzhang800 dbzhang800 本版等级:
#12 得分:0 回复于: 2014-04-03 16:13:59
引用 7 楼 TBWood 的回复: (2) 浮点数相等判断 因为 浮点数在内存中存放,可能无法精确的储存,所以同一个值,可能有不同的内存数据 这是说法是有问题的,同一个值,对应的内存数据是唯一的。
引用 7 楼 TBWood 的回复: (2) 以float 为例,32位APP中精度为 6-7,所以取 1e-7。 两个数字 A 、 B, if ( |A-B| <1e-7 ) 则 A、B相等。 这儿你当成定点数进行分析了。这个精度要取决于要比较的数据。比如1e-10, 和 1.00001e-10 两个数的比较等
这篇关于两个浮点数相等比较的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!