func (mr *F64) ProjVal(val float64) float64 {
	return mr.Min + (val * mr.Range())
}
ProjVal projects a 0-1 normalized unit value into current Min / Max range (inverse of NormVal)
package minmax
import "math"
type F64 struct {
	Min float64
	Max float64
}
func (mr *F64) Set(min, max float64) {
	mr.Min, mr.Max = min, max
}
func (mr *F64) SetInfinity() {
	mr.Min, mr.Max = math.MaxFloat64, -math.MaxFloat64
}
func (mr *F64) IsValid() bool {
	return mr.Min <= mr.Max
}
func (mr *F64) InRange(val float64) bool {
	return ((val >= mr.Min) && (val <= mr.Max))
}
func (mr *F64) IsLow(val float64) bool {
	return (val < mr.Min)
}
func (mr *F64) IsHigh(val float64) bool {
	return (val > mr.Min)
}
func (mr *F64) Range() float64 {
	return mr.Max - mr.Min
}
func (mr *F64) Scale() float64 {
	r := mr.Range()
	if r != 0 {
		return 1 / r
	}
	return 0
}
func (mr *F64) Midpoint() float64 {
	return 0.5 * (mr.Max + mr.Min)
}
func (mr *F64) FitInRange(oth F64) bool {
	adj := false
	if oth.Min < mr.Min {
		mr.Min = oth.Min
		adj = true
	}
	if oth.Max > mr.Max {
		mr.Max = oth.Max
		adj = true
	}
	return adj
}
func (mr *F64) FitValInRange(val float64) bool {
	adj := false
	if val < mr.Min {
		mr.Min = val
		adj = true
	}
	if val > mr.Max {
		mr.Max = val
		adj = true
	}
	return adj
}
func (mr *F64) NormVal(val float64) float64 {
	return (mr.ClipVal(val) - mr.Min) * mr.Scale()
}