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

在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;
}
是不是很神奇 吐舌头


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值