免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 19162 | 回复: 26
打印 上一主题 下一主题

判断float是不是0 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-09-05 20:10 |只看该作者 |倒序浏览
if(x < -0.000001 && x > 0.000001)还是if(x > -0.000001 && x < 0.000001)

上网查这两种回答都有,不知道写错了还是就是这样;如果是前者,请说明一下理由

论坛徽章:
0
2 [报告]
发表于 2008-09-05 20:15 |只看该作者
原帖由 kukule75 于 2008-9-5 20:10 发表
if(x < -0.000001 && x > 0.000001)还是if(x > -0.000001 && x < 0.000001)

上网查这两种回答都有,不知道写错了还是就是这样;如果是前者,请说明一下理由

前者是!=0 后者是==0
至于这个0.000001 又叫做epsilon
浮点计算有误差啊 完全等于0几率很小

[ 本帖最后由 blizzard213 于 2008-9-5 20:17 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2008-09-05 20:28 |只看该作者
原帖由 blizzard213 于 2008-9-5 20:15 发表

前者是!=0 后者是==0
至于这个0.000001 又叫做epsilon
浮点计算有误差啊 完全等于0几率很小


谢谢提点

论坛徽章:
0
4 [报告]
发表于 2008-09-05 23:01 |只看该作者
0.000001这个数的选择和平台有关吗

论坛徽章:
0
5 [报告]
发表于 2008-09-05 23:47 |只看该作者
判断 float 是否为 0,最好的方法是:

#define F2I  (*((int *)&f))

if (F2I(f) == 0)
{
         /* it's zero */
       ... ...
}

论坛徽章:
0
6 [报告]
发表于 2008-09-06 00:10 |只看该作者
原帖由 mik 于 2008-9-5 23:47 发表
判断 float 是否为 0,最好的方法是:

#define F2I  (*((int *)&f))

if (F2I(f) == 0)
{
         /* it's zero */
       ... ...
}


同意
但是判断浮点数是否为0的大多数语义 是在一个预定义的epsilon内都认为是0
如果严格按照您给出的方法 那么一些图形程序是无法编写的
比如一条光线是否与球面相切

不过你给出的方法“精确”匹配lz的字面意义

论坛徽章:
0
7 [报告]
发表于 2008-09-06 05:54 |只看该作者
原帖由 mik 于 2008-9-5 07:47 发表
判断 float 是否为 0,最好的方法是:

#define F2I  (*((int *)&f))

if (F2I(f) == 0)
{
         /* it's zero */
       ... ...
}


这样还不如直接 if (f == 0.0),而且double类型就不行了。
正道还是 if (fabs(x) < EPSILON)

论坛徽章:
0
8 [报告]
发表于 2008-09-06 09:14 |只看该作者
原帖由 emacsnw 于 2008-9-6 05:54 发表


这样还不如直接 if (f == 0.0),而且double类型就不行了。
正道还是 if (fabs(x) < EPSILON)


清晰明了

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
9 [报告]
发表于 2008-09-06 17:17 |只看该作者
不知道判断浮点数是否为零的应用场合在什么地方

论坛徽章:
0
10 [报告]
发表于 2008-09-06 17:38 |只看该作者
原帖由 Godbach 于 2008-9-6 17:17 发表
不知道判断浮点数是否为零的应用场合在什么地方

opengl/directx的代码里到处都是
碰撞检测 光线跟踪etc etc etc...
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP