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

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

I just grabbed two separate witnesses showing the result of the relevant
floating point math - I apologize for any offense.

On Tue Feb 24 2015 at 1:15:01 PM Matthias Felleisen <matthias at ccs.neu.edu>
wrote:

>
> That's the saddest argument in support of anything Racket I have ever seen
> (even with the smiley).
>
>
> On Feb 24, 2015, at 1:05 PM, Andrew Kent <andmkent at indiana.edu> wrote:
>
> > 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
> > ____________________
> >  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/46aa2cd0/attachment.html>

Posted on the users mailing list.