Slightly slower,

    double y = floor(x):
    double d = x - y;
    if (d > 0.5) {
         return ceil(x);
    } else {
         return y;
    }

but it gives your desired result with little (visible) special casing.

On Wed, Jan 19, 2011 at 8:04 AM, sebb <seb...@gmail.com> wrote:

> FastMath.rint(x) has the following code:
>
>        double y = floor(x);
>        double d = x - y;
>
>        if (d > 0.5) {
>            return y+1.0; // round up
>        }
>  ...
>
> For -0.5 < x < 0 the rounding up generates +0.0  - rather than -0.0,
> as expected by the sign of the input parameter.
>
> Is there an easy way to fix this, other than explicitly checking for y ==
> -1.0?
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
> For additional commands, e-mail: dev-h...@commons.apache.org
>
>

Reply via email to