The latter is easy to fix; I've submitted a pull request. The former is trickier. The problem is not so much due to the step size itself, but rather to a combination of the step size and of a particular iteration state.
(For people following along, the issue is that there exists a value `x` such that `(= (+ x 1e-17) x)`, and that the iteration reaches that `x` as its state at some point, then loops.) Guarding against that would require an additional check at each iteration, which may introduce overhead. I did some very, very crude benchmarking, and here's what I got: Without extra check: > (time (for ([i (in-range 10000000000)]) i)) cpu time: 19478 real time: 19469 gc time: 0 > (time (for ([i (in-range 10000000000)]) i)) cpu time: 20171 real time: 20179 gc time: 0 > (time (for ([i (in-range 10000000000)]) i)) cpu time: 20049 real time: 20043 gc time: 0 With extra check: > (time (for ([i (in-range 10000000000)]) i)) cpu time: 22100 real time: 22210 gc time: 0 > (time (for ([i (in-range 10000000000)]) i)) cpu time: 22227 real time: 22265 gc time: 0 > (time (for ([i (in-range 10000000000)]) i)) cpu time: 21934 real time: 22016 gc time: 0 The difference is non-insignificant. Admittedly, this is the worst possible case, though. Vincent On Mon, 17 Apr 2017 09:17:32 -0500, Tim Jervis wrote: > > Dear Racket Users, > > I’ve noticed the following procedure calls don’t return (on my 64 bit Mac > hardware): > > 1 (range (- 1 1e-16) 1.0 1e-17) > 2 (range 0 1 0) > > While (2) is obvious, (1) tripped me up (as I hadn’t noticed my step size had > fallen to effectively zero). > > A small tweak to for.rkt in the racket distribution could trap the condition > of an actually or effectively zero step. for.rkt already traps the condition > where step is not real. > > If this makes sense, could one of the authors consider adding the tweak? Or > is there a reason for leaving it alone? > > Kind regards, > > Tim > > Tim Jervis > > http://timjervis.com/ > > -- > You received this message because you are subscribed to the Google Groups > "Racket Users" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > For more options, visit https://groups.google.com/d/optout. -- You received this message because you are subscribed to the Google Groups "Racket Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.

