【笔记】浮点数比较
本帖最后由 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);
学习了 多更新一点 嗯,楼主好认真,我要向楼主学习了 学习了! 感谢楼主! 不同的语言,浮点数比较好象不太一样
页:
[1]