免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4538 | 回复: 13

[C++] bool isEqual(float,float)能这样使用吗? [复制链接]

论坛徽章:
0
发表于 2012-11-10 10:10 |显示全部楼层
碰到一个笔试题,给个函数,判断这样有没有问题,如下:

bool isEqual(float f1,float f2)
{
    return (f1 == f2);
}

这个函数有没有问题?求解

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
发表于 2012-11-10 10:14 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16赛季CBA联赛之青岛
日期:2016-07-05 12:36:0515-16赛季CBA联赛之广东
日期:2016-06-29 11:45:542015亚冠之全北现代
日期:2015-07-22 08:09:472015年辞旧岁徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39狮子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技术图书徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
发表于 2012-11-10 11:18 |显示全部楼层
估计那个傻逼的考官想考的是“相近”,而非“相等”
类似于“浮点数不能用==来判断”是傻到一定境界的家伙才能总结出来的

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
发表于 2012-11-10 11:33 |显示全部楼层
  1. #include <iostream>
  2. #include <math.h>

  3. bool IsEqual(float left, float right)
  4. {
  5.     return fabsf(left - right) < 1e-6;
  6. }

  7. int main(int argc, char* const argv[])
  8. {
  9.     float a = 1.2;
  10.     float b = 1.2;
  11.     float c = 1.21;

  12.     std::cout << IsEqual(a, b) << std::endl;
  13.     std::cout << IsEqual(a, c) << std::endl;

  14.     return 0;
  15. }
复制代码

论坛徽章:
6
技术图书徽章
日期:2013-11-13 11:11:27子鼠
日期:2014-02-20 17:54:13处女座
日期:2014-06-16 17:43:33午马
日期:2014-08-08 09:11:17未羊
日期:2014-08-10 11:57:072015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2012-11-12 11:21 |显示全部楼层
这个是不注意就会出隐藏BUG的地方。是要考处理问题的细致吧。

论坛徽章:
0
发表于 2012-11-12 12:58 |显示全部楼层
linux_c_py_php 发表于 2012-11-10 11:33

如果参数是NaN或者Infinity呢?

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
发表于 2012-11-12 14:26 |显示全部楼层
这位大侠也太仔细了, 伤不起.

qinggeng 发表于 2012-11-12 12:58
如果参数是NaN或者Infinity呢?

论坛徽章:
323
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
发表于 2012-11-12 14:32 |显示全部楼层
能不能用关键看需求

论坛徽章:
0
发表于 2012-11-12 14:38 |显示全部楼层
linux_c_py_php 发表于 2012-11-12 14:26
这位大侠也太仔细了, 伤不起.


别笑,boost.math里面专门有一套处理浮点数的函数。我感觉一般对浮点数的处理也就是够用,但真正细致什么的是非常麻烦的事情,麻烦到需要一整个库来处理它。

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
发表于 2012-11-12 15:06 |显示全部楼层
... 那还真得看需求了, 估计等你有这么高精度的需求, 用GMP/BC会更实在一点.

qinggeng 发表于 2012-11-12 14:38
别笑,boost.math里面专门有一套处理浮点数的函数。我感觉一般对浮点数的处理也就是够用,但真正细致什 ...
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP