另一种求平均数方法,不容易溢出

2019-07-21 08:39发布

本帖最后由 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;
                }
        }
        
}

不知道有几个朋友能看懂这逻辑,能看懂的估计是知音来得。








友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。