1d0
<
30,34d28
< /*
< * $Id$
< *
< */
<
37a32
> #include "base/intmath.hh"
44,46c39,41
< m_binsize = binsize;
< m_bins = bins;
< clear();
---
> m_binsize = binsize;
> m_bins = bins;
> clear();
53c48,49
< void Histogram::clear(int binsize, int bins)
---
> void
> Histogram::clear(int binsize, int bins)
55,56c51,52
< m_binsize = binsize;
< clear(bins);
---
> m_binsize = binsize;
> clear(bins);
59c55,56
< void Histogram::clear(int bins)
---
> void
> Histogram::clear(int bins)
61,69c58,66
< m_bins = bins;
< m_largest_bin = 0;
< m_max = 0;
< m_data.setSize(m_bins);
< for (int i = 0; i < m_bins; i++) {
< m_data[i] = 0;
< }
< m_count = 0;
< m_max = 0;
---
> m_bins = bins;
> m_largest_bin = 0;
> m_max = 0;
> m_data.setSize(m_bins);
> for (int i = 0; i < m_bins; i++) {
> m_data[i] = 0;
> }
> m_count = 0;
> m_max = 0;
71,72c68,69
< m_sumSamples = 0;
< m_sumSquaredSamples = 0;
---
> m_sumSamples = 0;
> m_sumSquaredSamples = 0;
76c73,74
< void Histogram::add(int64 value)
---
> void
> Histogram::add(int64 value)
78,80c76,78
< assert(value >= 0);
< m_max = max(m_max, value);
< m_count++;
---
> assert(value >= 0);
> m_max = max(m_max, value);
> m_count++;
82,83c80,81
< m_sumSamples += value;
< m_sumSquaredSamples += (value*value);
---
> m_sumSamples += value;
> m_sumSquaredSamples += (value*value);
85,89c83,93
< int index;
< if (m_binsize == -1) {
< // This is a log base 2 histogram
< if (value == 0) {
< index = 0;
---
> int index;
> if (m_binsize == -1) {
> // This is a log base 2 histogram
> if (value == 0) {
> index = 0;
> } else {
> index = floorLog2(value) + 1;
> if (index >= m_data.size()) {
> index = m_data.size() - 1;
> }
> }
91,94c95,105
< index = int(log(double(value))/log(2.0))+1;
< if (index >= m_data.size()) {
< index = m_data.size()-1;
< }
---
> // This is a linear histogram
> while (m_max >= (m_bins * m_binsize)) {
> for (int i = 0; i < m_bins/2; i++) {
> m_data[i] = m_data[i*2] + m_data[i*2 + 1];
> }
> for (int i = m_bins/2; i < m_bins; i++) {
> m_data[i] = 0;
> }
> m_binsize *= 2;
> }
> index = value/m_binsize;
96,111c107,109
< } else {
< // This is a linear histogram
< while (m_max >= (m_bins * m_binsize)) {
< for (int i = 0; i < m_bins/2; i++) {
< m_data[i] = m_data[i*2] + m_data[i*2 + 1];
< }
< for (int i = m_bins/2; i < m_bins; i++) {
< m_data[i] = 0;
< }
< m_binsize *= 2;
< }
< index = value/m_binsize;
< }
< assert(index >= 0);
< m_data[index]++;
< m_largest_bin = max(m_largest_bin, index);
---
> assert(index >= 0);
> m_data[index]++;
> m_largest_bin = max(m_largest_bin, index);
114c112,113
< void Histogram::add(const Histogram& hist)
---
> void
> Histogram::add(const Histogram& hist)
116,118c115,117
< assert(hist.getBins() == m_bins);
< assert(hist.getBinSize() == -1); // assume log histogram
< assert(m_binsize == -1);
---
> assert(hist.getBins() == m_bins);
> assert(hist.getBinSize() == -1); // assume log histogram
> assert(m_binsize == -1);
120,126c119,120
< for (int j = 0; j < hist.getData(0); j++) {
< add(0);
< }
<
< for (int i = 1; i < m_bins; i++) {
< for (int j = 0; j < hist.getData(i); j++) {
< add(1<<(i-1)); // account for the + 1 index
---
> for (int j = 0; j < hist.getData(0); j++) {
> add(0);
128d121
< }
129a123,127
> for (int i = 1; i < m_bins; i++) {
> for (int j = 0; j < hist.getData(i); j++) {
> add(1<<(i-1)); // account for the + 1 index
> }
> }
135c133,134
< double Histogram::getStandardDeviation() const
---
> double
> Histogram::getStandardDeviation() const
137,143c136,142
< double variance;
< if(m_count > 1){
< variance = (double)(m_sumSquaredSamples - m_sumSamples*m_sumSamples/m_count)/(m_count - 1);
< } else {
< return 0;
< }
< return sqrt(variance);
---
> if (m_count <= 1)
> return 0.0;
>
> double variance =
> (double)(m_sumSquaredSamples - m_sumSamples * m_sumSamples / m_count)
> / (m_count - 1);
> return sqrt(variance);
146c145,146
< void Histogram::print(ostream& out) const
---
> void
> Histogram::print(ostream& out) const
148c148
< printWithMultiplier(out, 1.0);
---
> printWithMultiplier(out, 1.0);
151c151,152
< void Histogram::printPercent(ostream& out) const
---
> void
> Histogram::printPercent(ostream& out) const
153,157c154,158
< if (m_count == 0) {
< printWithMultiplier(out, 0.0);
< } else {
< printWithMultiplier(out, 100.0/double(m_count));
< }
---
> if (m_count == 0) {
> printWithMultiplier(out, 0.0);
> } else {
> printWithMultiplier(out, 100.0 / double(m_count));
> }
160c161,162
< void Histogram::printWithMultiplier(ostream& out, double multiplier) const
---
> void
> Histogram::printWithMultiplier(ostream& out, double multiplier) const
162,179c164,165
< if (m_binsize == -1) {
< out << "[binsize: log2 ";
< } else {
< out << "[binsize: " << m_binsize << " ";
< }
< out << "max: " << m_max << " ";
< out << "count: " << m_count << " ";
< // out << "total: " << m_sumSamples << " ";
< if (m_count == 0) {
< out << "average: NaN |";
< out << "standard deviation: NaN |";
< } else {
< out << "average: " << setw(5) << ((double) m_sumSamples)/m_count << " | ";
< out << "standard deviation: " << getStandardDeviation() << " |";
< }
< for (int i = 0; i < m_bins && i <= m_largest_bin; i++) {
< if (multiplier == 1.0) {
< out << " " << m_data[i];
---
> if (m_binsize == -1) {
> out << "[binsize: log2 ";
181c167
< out << " " << double(m_data[i]) * multiplier;
---
> out << "[binsize: " << m_binsize << " ";
183,184c169,187
< }
< out << " ]";
---
> out << "max: " << m_max << " ";
> out << "count: " << m_count << " ";
> // out << "total: " << m_sumSamples << " ";
> if (m_count == 0) {
> out << "average: NaN |";
> out << "standard deviation: NaN |";
> } else {
> out << "average: " << setw(5) << ((double) m_sumSamples)/m_count
> << " | ";
> out << "standard deviation: " << getStandardDeviation() << " |";
> }
> for (int i = 0; i < m_bins && i <= m_largest_bin; i++) {
> if (multiplier == 1.0) {
> out << " " << m_data[i];
> } else {
> out << " " << double(m_data[i]) * multiplier;
> }
> }
> out << " ]";
187c190,191
< bool node_less_then_eq(const Histogram* n1, const Histogram* n2)
---
> bool
> node_less_then_eq(const Histogram* n1, const Histogram* n2)
189c193
< return (n1->size() > n2->size());
---
> return (n1->size() > n2->size());