Senior Dogsbody Engineer  

如果用传统的方法,先把所有的数加起来再除以个数,求和时可能溢出,所以不能用这种方法。

 新的算法:

前n(n>0)个数的平均数 = 前(n-1)个数的平均数 + (第n个数 - 前(n-1)个数的平均数)/ n

 

#include <stdio.h>
#include <string.h>
#include "string"

using namespace std;

double getAver(unsigned int *p, int iSize)
{
    double dbAver = 0;
    if(iSize == 0)
    {
        return dbAver;
    }
    
    dbAver = *p++;
    for(int i = 1; i < iSize; i++)
    {
        dbAver = dbAver + (*p++ - dbAver)/ (i + 1);
    }
    
    return dbAver;
}


int main()
{
  unsigned int arr[8] = {1, 2, 3, 4, 5, 6, 7, 8};    
  double dbRes = getAver(arr, sizeof(arr)/sizeof(unsigned int));
  printf("Hello %f ", dbRes);

  return 0;
}

 

posted on 2022-09-08 13:15  高级打杂工程师  阅读(79)  评论(0编辑  收藏  举报