diff --git a/range.cpp b/range.cpp index 3c190693..ae33671a 100644 --- a/range.cpp +++ b/range.cpp @@ -60,6 +60,17 @@ range::sanity (void) const { check (min <= max); } +namespace util { + template <> + void + range::sanity (void) const { + if (std::isnan (min) || std::isnan (max)) + return; + check (min <= max); + } +} + + template T range::clamp (T val) const @@ -74,11 +85,26 @@ range::normalise (T val) const { } +namespace util { + template <> + double + range::random (void) const { + double pos = ::rand () / (double)(RAND_MAX); + return (max - min) * pos + min; + } + + template <> + float + range::random (void) const { + float pos = ::rand () / (float)(RAND_MAX); + return (max - min) * pos + min; + } +} + template T range::random (void) const { - double pos = ::rand () / (double)(RAND_MAX); - return (max - min) * pos + min; + return min + (T)::rand () % (max - min); }