Loop with float increments (frange)?

Tim Peters tim.peters at gmail.com
Fri Apr 14 11:34:42 EDT 2006


[forum at anton.e4ward.com]
>> what's the standard way for a "for" loop with float increments?

[Dan Sommers]
> Use a while loop instead:
>
>     f = initial_value
>     while f <= final_value:
>         process(f)
>         f = f + increment
>
> Note that there is no general guarantee that f will actually be
> final_value; see also <http://docs.python.org/tut/node16.html>.

There's no guarantee that the `while` loop will execute "the expected"
number of times either, and it's generally a Bad Idea to do "f +=
increment" inside the loop:  the value of f suffers an additional
rounding error on each iteration that way, potentially making it drift
away from "the expected" value more & more as the loop goes on.

Standard careful numeric practice is this way:

    n = compute the number of iterations you want to make in total
    for i in xrange(n):
        process(initial_value + i * increment)

Then each value computed suffers a total of only two rounding errors
(one for the multiply, one for the add), independent of how large `n`
may be, and doesn't get worse as the loop goes on.



More information about the Python-list mailing list