From: dooglus Date: Wed, 10 Oct 2007 13:07:47 +0000 (+0000) Subject: Fix rount_to_int() so it rounds to the nearest integer. Previously it was rounding... X-Git-Url: https://git.pterodactylus.net/?a=commitdiff_plain;h=ac681f880251765bcd7ac3b244863895b3b8eef3;p=synfig.git Fix rount_to_int() so it rounds to the nearest integer. Previously it was rounding -1.333 to 0. git-svn-id: http://svn.voria.com/code@894 1f10aa63-cdf2-0310-b900-c93c546f37ac --- diff --git a/ETL/trunk/ETL/_misc.h b/ETL/trunk/ETL/_misc.h index 502179b..1fdcef9 100644 --- a/ETL/trunk/ETL/_misc.h +++ b/ETL/trunk/ETL/_misc.h @@ -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(x+0.5f); + // return static_cast(x+0.5f); // <-- (a) fast, but rounds -1.333 to 0! + // return static_cast(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(x+0.5); + // return static_cast(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(x+0.5); } inline int ceil_to_int(const float x) { return static_cast(ceil(x)); } inline int ceil_to_int(const double x) { return static_cast(ceil(x)); }