OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4839|回复: 9

float型数据在运算过程中出现问题,新人一枚,求各位大神助攻

[复制链接]

2

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2016-5-15
在线时间
15 小时
发表于 2016-5-15 10:29:49 | 显示全部楼层 |阅读模式
1金钱
输入一个单精度浮点型的数组,在循环10次之后求平均然后输出,但是在不断运算的过程中不知道为什么会出现平均值等于-340282366920938480000000000000000000000.000000,往上找的过程中也发现 数值的总和也是-340282366920938480000000000000000000000.000000,但是输入有没问题。网上查了一下,float型的数据的范围为:-2^128~2^128,刚好是这个数,这是什么原因,怎么解决这个问题啊!!!

void account(float32_t x[])                       
{
                        uint32_t i;
                        float32_t nd;
                        float32_t LAT;                               
                        static float32_t sum;
                       
                        for(i=0;i<4800;i++)               
                        {
                                       
                                        sum+=x[i];
                        }
               
                        n++;
                       
                        if(n>=10)                                               
                        {
                                        n=0;
                                        LAT=sum/48000;                       
                                        if(fabs(LAT)==340282366920938480000000000000000000000.000000)
                                        {
                                                                printf("  %f",LAT);
                                                                printf("  %f",sum);
                                                                printf("  %f",x[4799]);
                                                                STM_EVAL_LEDOn(LED6);
                                               
                                                                while(1);
                                        }
                                        nd=powf(10,(LAT-85)/10)/288;               
                                        ND+=nd;
                                        sum=0;
                                printf("  %f",LAT);
                                printf("  %f",ND);


                                       
                        }
}


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

35

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
357
金钱
357
注册时间
2016-4-2
在线时间
66 小时
发表于 2016-5-15 11:06:36 | 显示全部楼层
享受学习中的乐子,做合格的程序猿
回复

使用道具 举报

2

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2016-5-15
在线时间
15 小时
 楼主| 发表于 2016-5-15 14:02:34 | 显示全部楼层

初始化了下,还是会出现这个问题
回复

使用道具 举报

7

主题

188

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2282
金钱
2282
注册时间
2013-12-16
在线时间
448 小时
发表于 2016-5-15 15:01:20 | 显示全部楼层
可能你的输入数组x[]有问题,这里看不出来
回复

使用道具 举报

2

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2016-5-15
在线时间
15 小时
 楼主| 发表于 2016-5-15 15:04:04 | 显示全部楼层
zdfwyh 发表于 2016-5-15 15:01
可能你的输入数组x[]有问题,这里看不出来

我试过,出现问题的那组数据的输入,我打印出来看过,应该是没问题的
回复

使用道具 举报

7

主题

188

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2282
金钱
2282
注册时间
2013-12-16
在线时间
448 小时
发表于 2016-5-15 16:09:21 | 显示全部楼层
有个问题sum初始值是多少?你没有初始化,可能第一次是0.
你的sum声明是static的,这意味着每次执行该函数,sum就会一直以上次计算的值作为初始值累加下去,如果x[]一直都是正数,早晚会溢出的,即达到极限,然后结果就是不可以测的.
回复

使用道具 举报

2

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2016-5-15
在线时间
15 小时
 楼主| 发表于 2016-5-15 20:32:45 | 显示全部楼层
zdfwyh 发表于 2016-5-15 16:09
有个问题sum初始值是多少?你没有初始化,可能第一次是0.
你的sum声明是static的,这意味着每次执行该函数,su ...

上面有人提到了,我加了初始化之后还是会出现那个问题
回复

使用道具 举报

2

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2016-5-15
在线时间
15 小时
 楼主| 发表于 2016-5-15 20:35:56 | 显示全部楼层
心平气和 发表于 2016-5-15 20:32
上面有人提到了,我加了初始化之后还是会出现那个问题

而且这是改过之后的,之前sum是定义为全局变量的
回复

使用道具 举报

7

主题

188

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2282
金钱
2282
注册时间
2013-12-16
在线时间
448 小时
发表于 2016-5-16 07:40:17 | 显示全部楼层
贴出你修改过的代码,再看看吧
回复

使用道具 举报

60

主题

409

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2814
金钱
2814
注册时间
2012-10-17
在线时间
653 小时
发表于 2016-5-16 10:27:49 | 显示全部楼层
你都提到...sum+=x[i]; 就能出現這問題了
怎麼不在累加那裡下斷點看看加到哪裡出了問題






回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-27 06:31

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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