From af97b7037759c6959d11f617645c1854830a8c20 Mon Sep 17 00:00:00 2001 From: Danny Robson Date: Wed, 4 Jan 2012 17:05:09 +1100 Subject: [PATCH] Add floating specialisations for range::random --- range.cpp | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) 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); }