2016-09-20 61 views
0

當我嘗試創建從ab(如[1,1.1,1.2,1.3,...,2](a = 1,b = 2)這樣的增量列表時,則I開始有與特定代碼有問題,我想出了:創建增量列表

def Range(a,b,r): 
    lst1=[] 
    y=a 
    while y<b: 
     lst1.append(round(float(y+10**-r),r)) 
     y+=10**-r 
    return lst1 

print Range(1,2,3) 

這裏,r是我的增量(10**-r)的功率對於r=1r=2的代碼工作正常,並在結束[...,2,0]。但是對於r=3r=4,它分別在[...,2.001]和[...,2.0001]結束。但是,對於r=5r=6,它回到結束於2.是否有我的代碼錯誤或這是一種錯誤?

+1

只需閱讀http://floating-point-gui.de/。 –

+0

這是不同的。我在列表中得到了一個與列表邏輯相反的額外元素(例如,獲得2.001元素,迷失者必須採用y = 2.000,但其中的邏輯是y <2.000)。再加上我把數字加起來了。 –

回答

2

說,拿到2.001元素,則失去了參加Y = 2.000

這是不正確; y有可能變成1.99999999999997。

您檢查y < b,但然後將round(float(y+10**-r),r)添加到列表中。當然第一個是可能的,但第二個仍然比b大。

要查看正在發生的事情,請刪除舍入,然後查看列表中倒數第二個數字,以防錯誤發生。

+1

啊。你聰明的人。聰明,聰明的人。非常感謝你。我會給你一個鬆餅,但不幸的是,我現在不在你身邊。 –