金牌会员
- 积分
- 1109
- 金钱
- 1109
- 注册时间
- 2016-3-25
- 在线时间
- 360 小时
|
本帖最后由 Mr.liu 于 2018-10-26 20:14 编辑
这是另一种求平均数方法,不容易产生数据溢出,但是会比较占用CPU时间。这个算法适合数据比较大,且数据量比较多的情况。
这完全是我个人突然想出来的。现在共享给大家,帮忙看看有没有BUG。我也没有仔细去推敲,欢迎大家发表意见。
uint32_t MeanNumber(int32_t *Data,uint8_t DataLen)
{
uint8_t i,Remain=0;
int32_t BaseNumber=0,AverValue=0;
BaseNumber=Data[0];
for(i=0;i<DataLen;i++)
{
if(Data[0]>Data[i+1])
{
AverValue-=Data[0]-Data[i+1];
}
else
{
AverValue+=Data[i+1]-Data[0];
}
}
if(AverValue>=0x80000000)
{
AverValue=~AverValue-1;
AverValue=AverValue/DataLen;
Remain=AverValue%DataLen;
if(Remain>=5)
{
AverValue=Data[0]-AverValue+1;
return AverValue;
}
else
{
AverValue=Data[0]-AverValue;
return AverValue;
}
}
else
{
AverValue=AverValue/DataLen;
Remain=AverValue%DataLen;
if(Remain>=5)
{
AverValue=Data[0]+AverValue+1;
return AverValue;
}
else
{
AverValue=Data[0]+AverValue;
return AverValue;
}
}
}
不知道有几个朋友能看懂这逻辑,能看懂的估计是知音来得。
|
|