-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathStatistics.cpp
More file actions
44 lines (37 loc) · 961 Bytes
/
Statistics.cpp
File metadata and controls
44 lines (37 loc) · 961 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include "Statistics.h"
Statistics::Statistics(const std::string& name) : m_Name(name), m_Summary(0.0),
m_Count(0), m_RD(), m_RNG(m_RD()),
m_RandomMedian(0, 9999)
{
m_Reservoir.reserve(1024);
}
Statistics::~Statistics()
{
std::sort(m_Reservoir.begin(), m_Reservoir.end());
double median;
size_t sz = m_Reservoir.size();
if (sz % 2 == 0 && sz != 0)
{
median = (m_Reservoir[sz / 2] + m_Reservoir[sz / 2 - 1]) / 2;
}
else
{
median = m_Reservoir[sz / 2];
}
std::cout << "Valute name: " << m_Name << std::endl;
std::cout << "Average value: " << m_Summary / m_Count << std::endl;
std::cout << "Median value: " << median << std::endl;
}
void Statistics::insert(long double number)
{
m_Summary += number;
if (m_Count < 10000)
{
m_Reservoir.push_back(number);
}
else
{
m_Reservoir.at(m_RandomMedian(m_RNG)) = number;
}
++m_Count;
}