浮点数的范围函数

时间:2016-02-08 14:38:33

标签: python function numbers range

我想使用浮动的内置范围功能,但显然它不起作用,并且通过快速研究,我明白没有内置选项,我和#39 ;我需要为此编写自己的函数。所以我做了:

def fltrange(mini, maxi, step):
lst = []
while mini < maxi:
    lst.append(mini)
    mini += step
return lst
 rang = fltrange(-20.0, 20.1, 0.1)
 print(rang)
 input()

但这是我得到的: result

步骤应该只有0.1000000 ......,而是它(有时会改变)0.100000000000001。

提前致谢。

2 个答案:

答案 0 :(得分:4)

有趣的事实:1/10不能用浮点数精确表示。您最接近的是0.1000000000000000055511151231257827021181583404541015625。打印时最右边的数字通常会被遗漏,但它们仍然存在。这解释了错误的积累,因为你不断增加0.1s的总和。

您可以使用乘法方法而不是累积和来消除某些不准确性(但不是全部):

def fltrange(mini, maxi, step):
    lst = []
    width = maxi - mini
    num_steps = int(width/step)
    for i in range(num_steps):
        lst.append(mini + i*step)
    return lst
rang = fltrange(-20.0, 20.1, 0.1)
print(rang)

结果(为了清楚起见,我添加了换行符):

[-20.0, -19.9, -19.8, -19.7, -19.6, -19.5, -19.4, -19.3, -19.2, -19.1, 
-19.0, -18.9, -18.8, -18.7, -18.6, -18.5, -18.4, -18.3, -18.2, -18.1, 
-18.0, -17.9, -17.8, -17.7, -17.6, -17.5, -17.4, -17.3, -17.2, -17.1, 
-17.0, -16.9, -16.8, -16.7, -16.6, -16.5, -16.4, -16.3, -16.2, -16.1, 
-16.0, -15.899999999999999, -15.8, -15.7, -15.6, -15.5, -15.399999999999999, -15.3, -15.2, -15.1, -15.0,
...
19.1, 19.200000000000003, 19.300000000000004, 19.400000000000006, 19.5, 19.6, 19.700000000000003, 19.800000000000004, 19.900000000000006, 20.0]

答案 1 :(得分:1)

您可以使用numpy。有一些功能可以满足您的需求。

import numpy as np  # of course :)

linspace

np.linspace(1, 10, num=200)
array([  1.        ,   1.04522613,   1.09045226,   1.13567839,
         1.18090452,   1.22613065,   1.27135678,   1.31658291,
         ...
         9.68341709,   9.72864322,   9.77386935,   9.81909548,
         9.86432161,   9.90954774,   9.95477387,  10.        ])

arange

np.arange(1., 10., 0.1)
array([ 1. ,  1.1,  1.2,  1.3,  1.4,  1.5,  1.6,  1.7,  1.8,  1.9,  2. ,
        2.1,  2.2,  2.3,  2.4,  2.5,  2.6,  2.7,  2.8,  2.9,  3. ,  3.1,
        ...
        8.7,  8.8,  8.9,  9. ,  9.1,  9.2,  9.3,  9.4,  9.5,  9.6,  9.7,
        9.8,  9.9])

P.S。但是,它在技术上并不是一个生成器,它在Python3中是range(Python2.x的xrange)。