1. 程式人生 > >浮點數可以用==來比較是否相等嗎?

浮點數可以用==來比較是否相等嗎?

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