好友
阅读权限10
听众
最后登录1970-1-1
|
sphao
发表于 2017-8-13 17:49
本帖最后由 sphao 于 2017-8-13 17:50 编辑
浮点数在计算机中的存储并不精确,会对“==”比较带来极大地干扰,因此需要引进一个极小数eps来对这种误差进行修正。
我们规定,当一个数a落在了[b-eps,b+eps]区间中时,就应当判断为a==b成立。
经验表明,eps取10-8是一个合适的数字,因此可以将eps定义为常量1e-8:
const double eps = 1e-8;
为了使比较更加方便,把比较操作写成宏定义的形式:
#define Equ(a,b) ((fabs((a)-(b)))<(eps))
即 如果a,b的差的绝对值小于eps就返回true,如果想使用不等于,只要在使用的时候在Equ前加个非运算符“!”即可。
同样,由于这种误差的影响,会使其他运算符的比较也出现差错,也需要利用eps进行修正。
大于运算符(>) #define More(a,b) (((a)-(b))>(eps)
小于运算符(<) #define Less(a,b) (((a)-(b))<(-eps))
大于等于运算符(>=) #define MoreEqu(a,b) (((a)-(b))>(-eps))
小于等于运算符(<=) #define More(a,b) (((a)-(b))<(eps))
圆周率π
因为cosπ = -1, π = arccos(-1)。因此只需把π写成常量acos(-1.0)即可。
const double Pi = acos(-1.0);
|
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|