查看: 2024|回复: 4

[其他] 浮点数运算问题

[复制链接]

该用户从未签到

1

主题

5

帖子

0

新手上路

Rank: 1

积分
46
最后登录
2019-1-7
发表于 2015-9-27 19:59:55 | 显示全部楼层 |阅读模式
本人初学FREESCALE单片机,使用的是08DZ60的MCU,调试程序时遇到以下问题.
下面程序的功能是把AD转换值通过查表法查到相应的温度值放入数组内,RES变量的值用整型时运行没有问题,但把数据类型改为浮点数时出现问题, temp_msg[i]数组里的数据经常改变,请教各位大神问题出在哪里,谢谢.

const struct temp temp_data[]={
{0,327},{1,311},{2,296},{3,282},{4,268},{5,255},{6,243},{7,231},{8,220},{9,210},
{10,200},{11,191},{12,182},{13,173},{14,165},{15,158},{16,151},{17,144},{18,137},{19,131},
{20,125},{21,119},{22,114},{23,109},{24,104},{25,100},{26,95},{27,91},{28,87},{29,83},
{30,80},{31,76},{32,73},{33,70},{34,67},{35,64},{36,61},{37,59},{38,56},{39,54},
{40,52},{41,50},{42,47},{43,46},{44,44},{45,42},{46,40},{47,39},{48,37},{49,36},
{50,34},{51,33},{52,31},{53,30},{54,29},{55,28},{56,27},{57,26},{58,25},{59,24}
};

unsigned char temp_msg[16];
void temp_value_input(void)
{
  unsigned char temp_value = 255;
  unsigned int AD_value;
  unsigned char i;

  AD_value = 1950;

  if(temp_convert(&temp_value,AD_value))
      temp_msg[i] = temp_value;
  else
      temp_msg[i] = 255;
      }
}

Bool temp_convert(unsigned char *temp_value,unsigned int AD_value)
{
    float res;
    unsigned char i;
   
    res = (float)100*AD_value/(4096-AD_value);
    for(i=0;i<60;i++)
    {
        if(temp_data[i+1].resistor < res && res <= temp_data[i].resistor)
        {
          *temp_value = temp_data[i].tempture;
          return(TRUE);
        }
     }
     return(FALSE);
}
我知道答案 目前已有4人回答
回复

使用道具 举报

该用户从未签到

1

主题

5

帖子

0

新手上路

Rank: 1

积分
46
最后登录
2019-1-7
 楼主| 发表于 2015-9-27 20:15:30 | 显示全部楼层
运行 res = (float)100*AD_value/(4096-AD_value);前的temp_msg的数据为
QQ图片20150927201054.png

运行 res = (float)100*AD_value/(4096-AD_value);后的temp_msg的数据为
QQ图片20150927201211.png
回复 支持 反对

使用道具 举报

  • TA的每日心情
    开心
    2017-2-9 14:16
  • 签到天数: 17 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    25

    主题

    1785

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    2250
    最后登录
    2024-6-11
    发表于 2015-9-28 10:56:14 | 显示全部楼层
    res = (float)100*AD_value/(4096-AD_value);
    这个中的AD_value非浮点数,先转成浮点数再计算。。。

    如res = (float)100.0*AD_value/(4096.0-AD_value);
    freescaleic.org.png
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    1

    主题

    5

    帖子

    0

    新手上路

    Rank: 1

    积分
    46
    最后登录
    2019-1-7
     楼主| 发表于 2015-9-29 17:13:08 来自手机 | 显示全部楼层
    那请问按您所说的,是否还有必要进行float强制类型转换呢?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    1

    主题

    5

    帖子

    0

    新手上路

    Rank: 1

    积分
    46
    最后登录
    2019-1-7
     楼主| 发表于 2015-9-30 21:42:43 | 显示全部楼层
    试过了,运行结果一样.
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-9-13 11:31 , Processed in 0.102763 second(s), 26 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表