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

在C语言中的浮点数,最常见的则是float和double了。那么浮点数可以直接用==来比较大小吗?事实证明是不可以的。

看个小例子吧:

#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)
是不是很神奇


你可能感兴趣的:(浮点数可以用==来比较是否相等吗?)