Generating equally-spaced floats with least rounding error

John Ladasky ladasky at my-deja.com
Sun Sep 25 07:38:14 CEST 2011


On Sep 24, 6:53 am, Steven D'Aprano <steve
+comp.lang.pyt... at pearwood.info> wrote:
> I'm trying to generate a sequence of equally-spaced numbers between a lower
> and upper limit. Given arbitrary limits, what is the best way to generate a
> list of equally spaced floats with the least rounding error for each point?
>
> For example, suppose I want to divide the range 0 to 2.1 into 7 equal
> intervals, then the end-points of each interval are:
>
> (0.0)---(0.3)---(0.6)---(0.9)---(1.2)---(1.5)---(1.8)---(2.1)
>
> and I'd like to return the values in the brackets. Using Decimal or Fraction
> is not an option, I must use floats. If the exact value isn't representable
> as a float, I'm okay with returning the nearest possible float.

Use numpy.

>>> from numpy import mgrid
>>> seq = mgrid[0.0:2.1:8j]
>>> seq

array([ 0. ,  0.3,  0.6,  0.9,  1.2,  1.5,  1.8,  2.1])

>>> for x in seq:
	print repr(x)

0.0
0.29999999999999999
0.59999999999999998
0.89999999999999991
1.2
1.5
1.7999999999999998
2.1000000000000001




More information about the Python-list mailing list