本文主要是介绍两个浮点数相等比较,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
你想问的是这个: 浮点数判断需要注意,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 |
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理 |
- 关注
- dbzhang800
- dbzhang800
- 本版等级:
-
| #11 得分:0 回复于: 2014-04-03 13:48:28 对,但是这个误差和你的程序有关,前面有人给的 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 这是说法是有问题的,同一个值,对应的内存数据是唯一的。 这儿你当成定点数进行分析了。这个精度要取决于要比较的数据。比如1e-10, 和 1.00001e-10 两个数的比较等 |
这篇关于两个浮点数相等比较的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!