打印
[AVR单片机]

没事来看看的朋友请进!!

[复制链接]
1611|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
rainning|  楼主 | 2008-4-21 15:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用的是mega64写的程序,可我遇到了一个太奇怪的问题,从没遇到过的,请看下面这几条语句:

void Cal_real_val(unsigned a)
{
   float  t1low,t1high,t3low,t3high;
    
     t1low=T1_low[a];
     t1high=T1_hig[a];
     t3low=T3_low[a];
     t3high=T3_hig[a];
    
          Ax=10000*(t1high/(t1high+t1low)-0.5)/0.125;
     
       Ay=10000*(t3high/(t3high+t3low)-0.5)/0.125;

}

这里的Ax Ay也是float变量,且为全局变量.从上面的式子可以看出:这里的Ax,Ay要想等于0则要t1low=t1high,t3low=t3high;可当有Ax=0或Ay=0时
t1low!=t1high,t3low!=t3high我实在是搞不懂这是什么原因,希望知道的朋友请告诉我!多谢!
     

相关帖子

沙发
rainning|  楼主 | 2008-4-21 15:23 | 只看该作者

忘了说我用的是ICC编译器!!

忘了说我用的是ICC编译器!!

使用特权

评论回复
板凳
t.jm| | 2008-4-21 17:16 | 只看该作者

这在浮点数里很正常.

由于精度原因,t1high/(t1high+t1low)是0.49999999或是0.50000001都会导致运算结果是0.

使用特权

评论回复
地板
rainning|  楼主 | 2008-4-21 17:32 | 只看该作者

我在公式前面是*10000了!

我在公式前面是先*10000了!不是你说的问题了!

使用特权

评论回复
5
mohanwei| | 2008-4-21 19:09 | 只看该作者

一定要强制转换。还有,最好不要出现“unsigned a”的写法

使用特权

评论回复
6
t.jm| | 2008-4-21 19:27 | 只看该作者

我在GCC里试了试。

象100.00000/(100.00000+100.00001)结果就是0.5

使用特权

评论回复
7
rainning|  楼主 | 2008-4-23 11:14 | 只看该作者

我的问题解决了!!

谢谢各位朋友,出现0值时我用算可并不是0,刚才换了个编译器就没有这个问题了,看来是不是ICC编译器不好用啊!我现在用的是codevision

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

20

帖子

0

粉丝