在C语言中的浮点数,最常见的则是float和double了。那么浮点数可以直接用==来比较大小吗?事实证明是不可以的。
看个小例子吧:
<pre name="code" class="cpp">#include "stdio.h"
int main()
{
float f = 3.14;
if( f == 3.14 )
{
printf( "相等\n" );
}
else
{
printf( "不相等\n" );
}
return 0;
}
如果你觉得结果是“相等”,那么你就上当了,或许你会问f给的初值就是3.14呀,为什么不相等呢
因为浮点数在内存中不能精确的存储,比如说3.14或许就会存成3.139999,当然这只是举个例子来便于更好的理解何谓“不能精确的存储”。
那么,如果想比较两个浮点数是否相等应该怎么做呢,通常情况下我们可以设置一个精度范围,如果在这个范围内,我们就认为它们是相等的,稍微修改一下上面的小代码,结果就不一样了呦:
#include "stdio.h"
#define ESP 0.000001
int main()
{
float f = 3.14;
if( (f - 3.14)>-ESP && (f - 3.14)<ESP )
{
printf( "相等\n" );
}
else
{
printf( "不相等\n" );
}
return 0;
}
是不是很神奇