不可将浮点变量用“==”或“!=”与任何数字比较。

 问:我想比较两个浮点型变量,应该怎么比较? 

答:大于、小于直接比较啊。  
   
  等于最好这样:  
  const   float   E   =   1e-6;  
  float   f1   ,   f2;  
  ……  
  if(fabs(f1   -   f2)   <   E)  
  {……}
----------------------------------------------------------------------------
  不可将浮点变量用“==”或“!=”与任何数字比较。
   千万要留意,无论是float还是double类型的变量,都有精度限制。所以一定要避免将浮点变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”形式。

假设浮点变量的名字为x,应当将  

if (x == 0.0)     // 隐含错误的比较

转化为

if ((x>=-EPSINON) && (x<=EPSINON))

其中EPSINON是允许的误差(即精度)。

..........................................................................................................................................................

好奇怪的循环问题
#include <stdio.h>

 

void main ()
 {
  
   float percent;

   for (percent = 0.0; percent <= 1.0; percent += 0.1)
     printf("%3.1f/n", percent);
 }

上面这个循环运行10次
 

for (percent = 0; percent < =10; percent += 1)
     printf("%3.1f/n", percent);

改成整数后,就运行11次了

..........................................................................................................................................................

这是数据精度的问题,浮点数的比较一般不用==判断,而是比较差值是否大于1E-6甚至更高精度。
for (percent = 0.0; percent <= 1.0; percent += 0.1)
     printf("%3.1f/n", percent);
将%3.1改为%3.7f,或%3.8f甚至更多位,可以明显发现数据的值不是完全的0.0,0.1,0.2,0.3这样加0.1。我们认为的1.0在内存里是1.000000119(我是%3.9f时得出的),它大于1.0,不执行了,所以只执行10次了。
for (percent = 0.0; percent <= 2.0; percent += 0.1)
     printf("%3.9f/n", percent);这时可以看到0到1.0的真实数据

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值