X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;ds=sidebyside;f=ETL%2Ftags%2Fstable%2FETL%2F_misc.h;h=6c842653a53380aecdaad852fa53b18da868a202;hb=8b9b713fd21b5b00fd8885aaeecc65ecc16b24cf;hp=502179b99c6e1bcc2c58a4486c2e4b6859672b6b;hpb=26d279453f9f77f36658584e5d2b3dbbdf56b761;p=synfig.git diff --git a/ETL/tags/stable/ETL/_misc.h b/ETL/tags/stable/ETL/_misc.h index 502179b..6c84265 100644 --- a/ETL/tags/stable/ETL/_misc.h +++ b/ETL/tags/stable/ETL/_misc.h @@ -4,6 +4,7 @@ ** $Id$ ** ** Copyright (c) 2002 Robert B. Quattlebaum Jr. +** Copyright (c) 2007 Chris Moore ** ** This package is free software; you can redistribute it and/or ** modify it under the terms of the GNU General Public License as @@ -72,12 +73,20 @@ binary_find(I begin, I end, const T& value) } inline int round_to_int(const float x) { - /*! \fixme Isn't there some x86 FPU instruction for quickly + /*! \todo 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 static_cast(x + 0.5); // <-- slower than (a), but correct, and faster than (b) + else return static_cast(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 static_cast(x + 0.5); + else return static_cast(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)); }