输入一个单精度浮点型的数组,在循环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);
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
我试过,出现问题的那组数据的输入,我打印出来看过,应该是没问题的
你的sum声明是static的,这意味着每次执行该函数,sum就会一直以上次计算的值作为初始值累加下去,如果x[]一直都是正数,早晚会溢出的,即达到极限,然后结果就是不可以测的.
上面有人提到了,我加了初始化之后还是会出现那个问题
一周热门 更多>