Skip to content

Instantly share code, notes, and snippets.

@ChunMinChang
Last active January 31, 2018 07:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ChunMinChang/a1d7533859dba59a1701d1d42c29bf82 to your computer and use it in GitHub Desktop.
Save ChunMinChang/a1d7533859dba59a1701d1d42c29bf82 to your computer and use it in GitHub Desktop.
Calculating average without sum #Math
// $ g++ avg.cpp --std=c++11
#include <iostream>
// double average = 0;
// uint64_t count = 0;
// void Add(uint64_t data)
// {
// average += (data - average) / ++count;
// }
// double GetAverage()
// {
// return average;
// }
// double UpdateAverage(uint64_t data)
// {
// static double average = 0;
// static uint64_t count = 0;
// average += (data - average) / ++count;
// return average;
// }
class Averager
{
public:
Averager()
: average(0)
, count(0)
{}
~Averager() {};
void Add(uint64_t data) { average += (data - average) / ++count; }
double GetAverage() { return average; }
private:
double average;
uint64_t count;
};
int main()
{
uint64_t data[] = { 23, 14, 75, 23, 66, 78, 11, 26 };
// for (unsigned int i = 0 ; i < sizeof(data)/sizeof(data[0]) ; ++i ) {
// Add(data[i]);
// }
// std::cout << "avg: " << GetAverage() << std::endl;
// double avg;
// for (unsigned int i = 0 ; i < sizeof(data)/sizeof(data[0]) ; ++i ) {
// avg = UpdateAverage(data[i]);
// }
// std::cout << "avg: " << avg << std::endl;
Averager averager;
for (auto d: data) { // C++ 11 style.
averager.Add(d);
}
std::cout << "avg: " << averager.GetAverage() << std::endl;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment