3std::array<double, 2> MinMax::min_max(
const std::vector<double> &values,
 
    6  std::array<double, 2> min_max({0.0, 0.0});
 
    8  for (
const auto &v : values) {
 
   23    MinMax::nice(min_max, flags);
 
   30MinMax::min_max(
const std::vector<std::vector<double>> &values, 
int flags) {
 
   32  std::array<double, 2> min_max({0.0, 0.0});
 
   34  for (
const auto &vals : values) {
 
   36    for (
const auto v : vals) {
 
   52    MinMax::nice(min_max, flags);
 
   58std::array<double, 2> MinMax::min_max(
 
   59    const std::vector<std::vector<std::pair<double, double>>> &values,
 
   62  std::array<double, 2> min_max({0.0, 0.0});
 
   64  for (
const auto &vals : values) {
 
   66    for (
const auto &v : vals) {
 
   68      if (v.second < min_max[0]) {
 
   70        min_max[0] = v.second;
 
   73      if (v.second > min_max[1]) {
 
   75        min_max[1] = v.second;
 
   82    MinMax::nice(min_max, flags);
 
   88void MinMax::nice(std::array<double, 2> &min_max, 
int flags) {
 
   90  double range = min_max[1] - min_max[0];
 
   92  double expt = floor(log10(range));
 
   94  double f = range / pow(10.0, expt);
 
   99  } 
else if (f <= 2.0) {
 
  102  } 
else if (f <= 5.0) {
 
  110  range = f * pow(10.0, expt);
 
  112  double d = range / 4.0;
 
  114  expt = floor(log10(d));
 
  116  f = d / pow(10.0, expt);
 
  121  } 
else if (f < 3.0) {
 
  124  } 
else if (f < 7.0) {
 
  132  d = f * pow(10.0, expt);
 
  134  min_max[0] = floor(min_max[0] / d) * d;
 
  136  if (flags & MinExtraRoom) {
 
  141  min_max[1] = ceil(min_max[1] / d) * d;
 
  143  if (flags & MaxExtraRoom) {
 
  145    min_max[1] = 1.10 * ceil(min_max[1] / d) * d;