#include "histogram.h" void find_minmax(const std::vector& numbers, double& min, double& max){ min = numbers[0]; max = numbers[0]; for (double x: numbers){ if (min > x){ min = x; } if (max < x){ max = x; } } } std::vector make_histogram(const std::vector& numbers, size_t bin_count){ double min, max; std::vector bins(bin_count); find_minmax(numbers, min, max); double diff = (max - min) / bin_count; for (double x: numbers){ bool found = false; for (size_t j = 0;(j < bin_count - 1) && !found; j++){ auto lo = min + j * diff; auto hi = min + (j + 1) * diff; if ((lo <= x) && (hi > x)){ bins[j]++; found = true; } } if(!found){ bins[bin_count - 1]++; } } return bins; } std::vector make_borders(const std::vector& numbers, size_t bin_count){ double min, max; find_minmax(numbers, min, max); double diff = (max - min) / bin_count; std::vector borders(bin_count - 1); for (size_t i = 0; i <= bin_count - 2; i++){ borders[i] = min + (i + 1) * diff; } return borders; }