浮點數可以用==來比較是否相等嗎?
阿新 • • 發佈:2019-01-28
在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;
}
是不是很神奇