Share Pastebin
Guest
Public paste!

hr0nix

By: a guest | Jul 9th, 2009 | Syntax: C++ | Size: 1.36 KB | Hits: 139 | Expires: Never
Copy text to clipboard
  1. #include <vector>
  2. #include <iostream>
  3. #include <windows.h>
  4.  
  5. using namespace std;
  6.  
  7. template<class T> double CalculateMean(T collection)
  8. {
  9.         double sum = 0;
  10.         int count = 0;
  11.        
  12.         T::iterator end = collection.end();
  13.         for(T::iterator it = collection.begin(); it != end; ++it)
  14.         {
  15.                 sum += (*it);
  16.                 count += 1;
  17.         }
  18.  
  19.         return sum / count;
  20. }
  21.  
  22. template<class T> double CalculateVariance(T collection)
  23. {
  24.         double mean = CalculateMean(collection);
  25.         double sum = 0;
  26.         int count = 0;
  27.  
  28.         T::iterator end = collection.end();
  29.         for(T::iterator it = collection.begin(); it != end; ++it)
  30.         {
  31.                 double value = *it;
  32.                 sum += (value - mean) * (value - mean);
  33.                 count += 1;
  34.         }
  35.  
  36.         return sum / count;
  37. }
  38.  
  39. double GenerateUniformDouble()
  40. {
  41.         return rand() / static_cast<double>(RAND_MAX);
  42. }
  43.  
  44. int _tmain(int argc, _TCHAR* argv[])
  45. {
  46.         const int SampleCount = 50000000;
  47.         std::vector<double> collection(SampleCount);
  48.         for (std::vector<double>::iterator it = collection.begin(); it != collection.end(); ++it)
  49.                 (*it) = GenerateUniformDouble();
  50.  
  51.         DWORD startTime = GetTickCount();
  52.         double mean = CalculateMean(collection);
  53.         double variance = CalculateVariance(collection);
  54.         DWORD elapsedTime = GetTickCount() - startTime;
  55.  
  56.         double timeInSec = elapsedTime / 1000.0;
  57.         std::cout << "C++ mean: " << mean << " var: " << variance << " time: " << timeInSec << std::endl;
  58.        
  59.         return 0;
  60. }