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   高级打杂工程师  阅读(98)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
 
点击右上角即可分享
微信分享提示