您的位置:首页 > 其它

浮点数可以用==来比较是否相等吗?

2016-10-11 22:59 260 查看
在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;
}是不是很神奇
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: