[racket] Inconsistency of `in-range` and numerical issues

From: Andrew Kent (andmkent at indiana.edu)
Date: Tue Feb 24 13:05:34 EST 2015

Racket:
(+ .1 .1 .1 .1 .1 .1 .1 .1)
0.7999999999999999

Python:

>>> .1 + .1 + .1 + .1 + .1 + .1 + .1 + .1

0.7999999999999999

Looks consistent to me =)

On Tue Feb 24 2015 at 10:43:19 AM Laurent <laurent.orseau at gmail.com> wrote:

> I've discovered a rather troubling behaviour when using `in-range` with
> floating point numbers, which I think is worth knowing in case you hadn't
> consider the issue before:
>
> On my machine, I get the following:
>
> (length (for/list ([i (in-range .1 .7 .1)]) i)) ; 6
> (length (for/list ([i (in-range .1 .8 .1)]) i)) ; 8 (!)
>
> But:
> (length (for/list ([i (in-range 1/10 7/10 1/10)]) i)) ; 6
> (length (for/list ([i (in-range 1/10 8/10 1/10)]) i)) ; 7
>
>
> Would it be a good idea to safe-guard these kinds of cases directly in
> `in-range`?
>
>
>
>
>
>
>
> ____________________
>   Racket Users list:
>   http://lists.racket-lang.org/users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20150224/c9c75dd8/attachment.html>

Posted on the users mailing list.