package main import ( "math/rand" ) type Interval struct { Min float64 Max float64 } func (i Interval) Size() float64 { return i.Max - i.Min; } func (i Interval) Include(x float64) bool { return i.Min <= x && x <= i.Max; } func (i Interval) Surround(x float64) bool { return i.Min < x && x < i.Max; } func (i Interval) Clamp(x float64) float64 { if x < i.Min { return i.Min; } if x > i.Max { return i.Max; } return x; } func (i Interval) Sample() float64 { return rand.Float64() * i.Size() + i.Min; }