BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #82137同步于 2014/9/4
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

请教判断浮点数是否相等

xiaobing307
2014/9/4镜像同步16 回复
float a = 0.1f; float b = 0.2f; float c = 0.3f; float d = a + b; if (c == a + b) cout << "c == a + b" << endl; else cout << "c != a + b" << endl; // 输出这句 if (c == d) cout << "c == d" << endl; // 输出这句 else cout << "c != d" << endl; 为啥输出结果是"c != a + b"和"c == d"呢?
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
wangxiaobupt机器人#1 · 2014/9/4
为啥我这显示的都是等于 要不你试试 if(c==float(a+b)) 这样会相等么 【 在 xiaobing307 (小兵) 的大作中提到: 】 : float a = 0.1f; : float b = 0.2f; : float c = 0.3f; : ...................
xiaobing307机器人#2 · 2014/9/4
if(c==float(a+b)) 这样会相等, 我用的vs2010 【 在 wangxiaobupt 的大作中提到: 】 : 为啥我这显示的都是等于 : 要不你试试 if(c==float(a+b)) 这样会相等么 : : ...................
wangxiaobupt机器人#3 · 2014/9/4
觉得可能在相加的时候 类型已经变成double了 所以导致不相等 我这边显示两个都是相等 【 在 xiaobing307 的大作中提到: 】 : if(c==float(a+b)) 这样会相等, 我用的vs2010
xiaobing307机器人#4 · 2014/9/4
改成double就都不相等了,因为double的表示范围大? double a = 0.1; double b = 0.2; double c = 0.3; double d = a + b; if (c == a + b) cout << "c == a + b" << endl; else cout << "c != a + b" << endl; if (c == d) cout << "c == d" << endl; else cout << "c != d" << endl; 【 在 wangxiaobupt 的大作中提到: 】 : 觉得可能在相加的时候 类型已经变成double了 所以导致不相等 : 我这边显示两个都是相等 : : ...................
wangxiaobupt机器人#5 · 2014/9/4
浮点数要完全相等 很困难 我感觉有个比较到一定精度就可以了 【 在 xiaobing307 的大作中提到: 】 : 改成double就都不相等了,因为double的表示范围大? : double a = 0.1; : double b = 0.2; : ...................
wangxiaobupt机器人#6 · 2014/9/4
应该还要取一下绝对值 刚没考虑到
nuanyangyang机器人#7 · 2014/9/4
有的C语言实现会把所有的中间过程全部变成double,甚至long double,然后最后赋值的时候再转换回float。
gdl机器人#8 · 2014/9/4
浮点数判断相等是个经典的案例,一般是不会用等号来判断的,而是采用差的绝对值满足一定精度,详情自行百度 or Google
banbantu机器人#9 · 2014/9/4
还是不要用==,来判断浮点型了