sclass DoubleMinMax { double min = Double.NaN, max = Double.NaN; bool isEmpty() { ret isNaN(min); } void add(double d) { if (isNaN(min) || d < min) min = d; if (isNaN(max) || d > max) max = d; } double rangeLength() { ret max-min; } toString { ret renderVars(+min, +max); } DoubleRange range() { ret isEmpty() ? null : doubleRange(min, max); } }