### 限制精度地比较两个实数大小

在进行程序设计时，经常需要进行实数的比较。由于不同实数类型数据在计算机中存储的有效位数是有限的，因此，在比较两个实数时一定要注意精度的问题。例如，下面的实数比较严格意义上说是存在漏洞的。

bool CompareNum(double dblNum1, double dblNum2)

{

return dblNum1 > dblNum2 ; //比较实数大小

}

下面利用 CompareNum 比较两个实数。

double dblNum1 = 12.45624111111111115;

double dblNum2 = 12.45624111111111112;

if (CompareNum(dblNum1, dblNum2)) //进行实数比较

{

cout << "dblNum1 大于 dblNum2" << endl;

}

else

{

cout << "dblNum1 不大于 dblNum2" << endl;

}

执行效果如图 1 所示。

图 1 实数大小比较

从图 1 中可以发现，CompareNum 函数认为 12.45624111111111115 与 12.45624111111111112 是相等的。在一些精密仪器制造领域是不允许有 0.00000000000000001 误差的。为了能够精确的进行实数比较，我们在比较实数时可以提供一个比较的精度。例如：

bool CompareNumber(double dblNum1, double dblNum2, double dblPrecision)

{

return (dblNum1 - dblNum2) < dblPrecision; //限定精度比较大小

}

这样，就能够根据用户的要求了灵活设置比较精度了。例如：

double dblNum1 = 12.45624111111111115;

double dblNum2 = 12.45624111111111112;

if (CompareNumber(dblNum1, dblNum2, 0.000000000000000000001)) //进行实数比较

{

cout << "dblNum1 大于 dblNum2" << endl;

}

else

{

cout << "dblNum1 不大于 dblNum2" << endl;

}

效果如图 2 所示。

图 2 实数精确比较