返回   cpper编程论坛 > Blog > polyrandom
注册账号 论坛帮助 会员列表 日历事件 搜索 今日新帖 标记版面已读

为这篇文章评分

EPSILON的管理

发表于 2007-02-03 07:57 AM 作者: polyrandom
大多数时候,浮点数的运算结果之间是不能直接作相等比较的。譬如说,如果我们要判断一个经过转换的浮点数是不是还是0,通常需要

static const float EPSILON = 0.000001f;
return ( fabsf( f ) < EPSILON );

这会带来一些问题。就拿我现在写的软件来说,因为有很多不同的基础库,它们又被很多程序使用。大多数人在写类似的判断函数的时候,都比较偷懒,他们不会试图在最基本的类库里面放一个判断函数,而是自己局部写一个。这导致了整个系统内有很多相同的代码,作相同的事情,但是使用不同的 EPSILON,有0.00004的,也有0.000001的。更惨的是,很多人已经离开公司,你无法知道那个0.00004是不是有特殊的意义。由于我们产品的特殊性,我们无法冒险去修改任何可能导入错误的地方。

目前听取了一个同事的建议,把所有的EPSILON都起一个名字,然后放在一个XML文件里面,在程序启动时读入。把所有浮点比较代码拉到公共基类里面,但是这些函数都需要传入EPSILON的。每个需要比较的地方根据名字读取配置文件中的值(当然只是一次),把它作为EPSILON传入比较函数。

P.S. 最恐怖的是,有些地方的EPSILON居然是0.1f。
评论 0 Email文章
评论总数 0

评论

发表评论 发表评论
作者为 polyrandom 的最新文章

所有时间均为格林尼治时间 +9。现在的时间是 11:03 PM


Powered by vBulletin® 版本 3.7.0
版权所有 ©2000 - 2009,Jelsoft Enterprises Ltd.
(C) Copy Right All Right Reserved 2001 - 2007

Search Engine Friendly URLs by vBSEO 3.1.0