Fix rount_to_int() so it rounds to the nearest integer. Previously it was rounding...
authordooglus <dooglus@1f10aa63-cdf2-0310-b900-c93c546f37ac>
Wed, 10 Oct 2007 13:07:47 +0000 (13:07 +0000)
committerdooglus <dooglus@1f10aa63-cdf2-0310-b900-c93c546f37ac>
Wed, 10 Oct 2007 13:07:47 +0000 (13:07 +0000)
git-svn-id: http://svn.voria.com/code@894 1f10aa63-cdf2-0310-b900-c93c546f37ac

ETL/trunk/ETL/_misc.h

index 502179b..1fdcef9 100644 (file)
@@ -75,9 +75,17 @@ inline int round_to_int(const float x) {
        /*!     \fixme Isn't there some x86 FPU instruction for quickly
        **      converting a float to a rounded integer? It's worth
        **      looking into at some point... */
-       return static_cast<int>(x+0.5f);
+       // return static_cast<int>(x+0.5f);             // <-- (a) fast, but rounds -1.333 to 0!
+       // return static_cast<int>(rintf(x));   // <-- (b) slow, but correct
+    if (x>=0) return (int) (x + 0.5);          // <-- slower than (a), but correct, and faster than (b)
+    else      return (int) (x - 0.5);
+}
+inline int round_to_int(const double x) {
+       // return static_cast<int>(x+0.5);
+       // return static_cast<int>(rint(x));
+       if (x>=0) return (int) (x + 0.5);
+    else      return (int) (x - 0.5);
 }
-inline int round_to_int(const double x) { return static_cast<int>(x+0.5); }
 
 inline int ceil_to_int(const float x) { return static_cast<int>(ceil(x)); }
 inline int ceil_to_int(const double x) { return static_cast<int>(ceil(x)); }