喜欢美食, 旅行..
分类: C/C++
2009-11-02 20:38:35
浮点数绝对误差法的一般做法:
bool IsEqual(double a,double b,double e)
{
return (a==b||fabs(a-b)
根据IEEE标准,浮点数在内存中的表示先是一个符号位,之后是阶码,最后是尾数。
阶码的大小可以当成是位数,所以同号的两个浮点数而言,a-b
对于异号的两个浮点数,可以借助0和-0来解决,对于64位数据类型double,-0在内存中相当于整型变量1<<63.
设a>0,b<0,则a-b
bool IsEqual(double a,double b,int d)
{
if ((int &)a>>63^(int &)b>>63) return (int &)a+((int &)b-(1<<63))
由于整数比起浮点数运算效率要高得多,所以采用此方法,运行效率会有所提高。
文章转自:http://hi.baidu.com/wuxyy/blog/item/ae8cb4fdfe50711609244dea.html