Floating point computation "non-bug"

Dave Elcock dave@sias.com
Fri Apr 11 16:39:00 GMT 2003


Andreas Schwab wrote:

>Dave Elcock <dave@sias.com> writes:
>
>|> Given that f1 is represented not as exactly 2.3, how does gcc manage to
>|> turn that in to 23 when assigning to f2, but 22 when casting to int?
>
>Because if you round (float)2.3*10 to float precision you get 23, but
>rounded to double precision you get 22.99999952316284179688 which is less
>than 23.
>
But even if I change both f1 and f2 into doubles, it still prints f1 as 
2.2999... and f2 as 23.000000....

So casting to int always rounds down, but lrint() rounds to nearest int. 
Is that correct?

Cheers,
Dave.





More information about the Gcc-bugs mailing list