浮点数可以用==来比较是否相等吗?
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;
}是不是很神奇
看个小例子吧:<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;
}是不是很神奇
相关文章推荐
- 浮点数比较大小,是否相等
- 比较两个浮点数是否相等
- C语言中比较两个浮点数是否相等的方法,fabs和abs
- Java中比较两个浮点数是否相等
- php比较两个浮点数是否相等
- PHP Float 永远不要比较两个浮点数是否相等
- go语言 浮点数比较是否相等
- 为什么说比较两个浮点数是否相等是不安全的?
- 比较两个浮点数是否相等
- 如何比较两个浮点数是否相等?
- 永远不要比较两个浮点数是否相等
- C语言中比较两个浮点数是否相等的方法,fabs和abs
- Delphi中比较GUID是否相等
- 判断两个( float )变量是否相等以及和 0 值比较方法
- 比较BigDecimal对象是否相等
- 浅谈比较两个String是否相等的方法
- ES6中Object.is方法比较两个值是否相等
- jquery比较两个数组是否相等,且找出不等的值。
- Gson:比较两个JSON字符串是否完全相等
- Java中,比较两个字符串引用变量是否相等