hr0nix
By: a guest | Jul 9th, 2009 | Syntax:
C++ | Size: 1.36 KB | Hits: 139 | Expires: Never
#include <vector>
#include <iostream>
#include <windows.h>
using namespace std;
template<class T> double CalculateMean(T collection)
{
double sum = 0;
int count = 0;
T::iterator end = collection.end();
for(T::iterator it = collection.begin(); it != end; ++it)
{
sum += (*it);
count += 1;
}
return sum / count;
}
template<class T> double CalculateVariance(T collection)
{
double mean = CalculateMean(collection);
double sum = 0;
int count = 0;
T::iterator end = collection.end();
for(T::iterator it = collection.begin(); it != end; ++it)
{
double value = *it;
sum += (value - mean) * (value - mean);
count += 1;
}
return sum / count;
}
double GenerateUniformDouble()
{
return rand() / static_cast<double>(RAND_MAX);
}
int _tmain(int argc, _TCHAR* argv[])
{
const int SampleCount = 50000000;
std::vector<double> collection(SampleCount);
for (std::vector<double>::iterator it = collection.begin(); it != collection.end(); ++it)
(*it) = GenerateUniformDouble();
DWORD startTime = GetTickCount();
double mean = CalculateMean(collection);
double variance = CalculateVariance(collection);
DWORD elapsedTime = GetTickCount() - startTime;
double timeInSec = elapsedTime / 1000.0;
std::cout << "C++ mean: " << mean << " var: " << variance << " time: " << timeInSec << std::endl;
return 0;
}