Class RealFrac: round

Lennart Augustsson lennart@mail.augustsson.net
Wed, 09 May 2001 08:14:11 -0400


Rijk-Jan van Haaften wrote:

> Hello,
>
> While I were writing a RealFrac implementation for BigDouble's (for
> high-precision computations) I found a strange implementation of
> round in the standard prelude (from the haskell definition):
>
> round x =
>         let (n,r) =
>                 properFraction x
>                 m = if r < 0 then n - 1 else n + 1
>         in case signum (abs r - 0.5) of
>                 -1 -> n
>                 0 -> if even n then n else m
>                 1 -> m
>
> The strange case is if signum (abs r - 0.5) is 0:
> such numbers are round to the nearest EVEN integer. In mathematics,
> computer science (the studies I'm doing) and physics, as far as I
> know, it is usual to round such numbers up, rather than to the nearest
> integer. For example:

Rounding to the nearest even number is considered the best practice by
people doing numerical analysis.  Even when I went to school (25 - 30
years ago) we were taught to round to the nearest even number, so it's
not exactly new.

    -- Lennart