怎么比较两个float的大小

浅色夏沫 2014-04-03 10:38:25
查了很多关于比较float大小的资料,都很乱,看起来懵懵的!有没有大牛来总结一下。。。。
...全文
29523 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
tbwork 2014-04-03
  • 打赏
  • 举报
回复
你想问的是这个: 浮点数判断需要注意,float 和double 的精度范围,超过范围的数字会被忽略 (1) 浮点数大小判断 如果没有等号关系在里面,也就必然一大一小,那么直接用 > 或者 < (2) 浮点数相等判断 因为 浮点数在内存中存放,可能无法精确的储存,所以同一个值,可能有不同的内存数据,所以要使用以下的方法: 以float 为例,32位APP中精度为 6-7,所以取 1e-7。 两个数字 A 、 B, if ( |A-B| <1e-7 ) 则 A、B相等。
赵4老师 2014-04-03
  • 打赏
  • 举报
回复
图灵狗 2014-04-03
  • 打赏
  • 举报
回复
float a = 12.03; float b = 345.80; if(a < b) { ... }
引用 楼主 wstlrh 的回复:
查了很多关于比较float大小的资料,都很乱,看起来懵懵的!有没有大牛来总结一下。。。。
「已注销」 2014-04-03
  • 打赏
  • 举报
回复
float比较大小有什么疑问呢,好奇
max_min_ 2014-04-03
  • 打赏
  • 举报
回复
直接比较有问题么?
PDD123 2014-04-03
  • 打赏
  • 举报
回复
直接比较就是了。
__phoenix 2014-04-03
  • 打赏
  • 举报
回复
什么意思??可以转换为string,按位比较
dbzhang800 2014-04-03
  • 打赏
  • 举报
回复
引用 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 两个数的比较等
dbzhang800 2014-04-03
  • 打赏
  • 举报
回复
引用 9 楼 wstlrh 的回复:
如果不判断相等就是直接比较就可以,如果要判断相等就做减法,如果结果在一个合理误差范围内就认为是相等的。。。是这么理解么?
对,但是这个误差和你的程序有关,前面有人给的 e-6/e-7都是有条件的,比如你需要的是e-30/e-15 都有可能。 -- 题外,其实不是不能直接用 == 比较大小,而是float运算后会有误差,你希望两个有一定误差的值相等。 比如下面的代码,由于0.1在二进制的世界中不能精确存储,累加后的b 并不是严格等于1
    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");
tbwork 2014-04-03
  • 打赏
  • 举报
回复
引用 9 楼 wstlrh 的回复:
如果不判断相等就是直接比较就可以,如果要判断相等就做减法,如果结果在一个合理误差范围内就认为是相等的。。。是这么理解么?
浅色夏沫 2014-04-03
  • 打赏
  • 举报
回复
如果不判断相等就是直接比较就可以,如果要判断相等就做减法,如果结果在一个合理误差范围内就认为是相等的。。。是这么理解么?
zcdabing 2014-04-03
  • 打赏
  • 举报
回复
我记得是 a-b>0.0000001并且b-a>0.0000001 a等于b if(a==b)这么做是不对的,应为这俩也不是个精确值

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧