sphao 发表于 2017-8-13 17:49

【笔记】浮点数比较

本帖最后由 sphao 于 2017-8-13 17:50 编辑

    浮点数在计算机中的存储并不精确,会对“==”比较带来极大地干扰,因此需要引进一个极小数eps来对这种误差进行修正。
 我们规定,当一个数a落在了区间中时,就应当判断为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);


qiaoqiaota 发表于 2017-8-13 18:07

学习了       多更新一点

roinlong 发表于 2017-8-13 18:19

嗯,楼主好认真,我要向楼主学习了

ShadowTeam 发表于 2017-8-13 18:49

学习了! 感谢楼主!

xyzhuanjian 发表于 2017-8-13 19:07

不同的语言,浮点数比较好象不太一样
页: [1]
查看完整版本: 【笔记】浮点数比较