[Numpy-discussion] simple problem with arange / roundoff

Eric Emsellem emsellem at obs.univ-lyon1.fr
Tue Jul 31 10:28:09 EDT 2007


Hi,

I discovered a bug in one of my program probably due to a round-off
problem in a "arange" statement.
I use something like:

step = (end - start) / (npix - 1.)
gridX = num.arange(start-step/2., end+step/2., step)

where I wish to get a simple 1D array with npix+1 numbers going from
(start-step/2.) to (end+step/2.).

But then, "arange" often gets me an array only going from
"start-step/2." to "end - step/2." instead, due very probably to
round-off problems (I guess it does not reach the last value because
<<(start-step/2.) + npix * step >> is found to be larger than (end+step/2.).

Here is an example:

start = -30.
end = 30.
npix = 31
step = (end - start) / (npix - 1.)
gridX = num.arange(start-step/2., end+step/2., step)
array([-31., -29., -27., -25., -23., -21., -19., -17., -15., -13., -11.,
        -9.,  -7.,  -5.,  -3.,  -1.,   1.,   3.,   5.,   7.,   9.,  11.,
        13.,  15.,  17.,  19.,  21.,  23.,  25.,  27.,  29.])

As you can see, it does not go up to 31., but only to 29, although step
is = 2.0

Is there is a way out of this ?
(except by doing the silly:   gridX = num.arange(start-step/2.,
end+1.001*step/2., step)   )

Thanks for any input there (and sorry for the silly question)

Eric



More information about the NumPy-Discussion mailing list