浮点数细节
大小比较
bool Isequ(double x,double y){
return (abs(x - y)) < eps;// eps 是自己设置的精度
}
提取整数位
因为机器中存储一些临界值的精度损失(比如1在机器中是0.9999999999,而5可能存的是5.000000000000001),所以单纯向上或者向下取整得到浮点数的整数位是十分危险的一件事。网上大多数方法都可能在边界上出现错误,在debug时简直是一场灾难,应当采用如下方法
int get_int(double x){
if(abs(x - (int)(x + .5)) < eps) return int(x + .5);
return int(x);
}