correct round of reals?

Fredrik Lundh fredrik at pythonware.com
Fri May 12 07:27:10 EDT 2000


Peter Schneider-Kamp <petersc at stud.ntnu.no> wrote:
> I have put the rint(3) function in the math module. As
> Guido observed this is not an ANSI C function and not
> available on every platform. Now I want to "simulate"
> rint on those insane platforms. What is the Right Way(TM)
> to do it?
> 
> I have written
>   double myrint(x) double x; {
>     return floor(x+0.5);
>   }
> so far, but that does not seem to exhibit the same
> behaviour. Problems with this definition:
> myrint(2.5) gives 3.0, not 2.0 as rint(3)
> myrint(3.5) gives 4.0 as expected
> 
> IEEE standard seems to be rounding towards the next
> even integer in .5-cases. How do I do that?

how about:

def rint(v, m=4503599627370496.0):
    if abs(v) > m:
        return v
    if v > 0:
        return (v + m) - m
    else:
        return (v - m) + m

(this assumes IEEE doubles)

</F>





More information about the Python-list mailing list