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;