Share Pastebin
Guest
Public paste!

hr0nix

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