2014-07-06 85 views
-5

我從學習Python開始。目前,我有以下的小塊代碼:最後一位小數是隨機計數浮點數

a = float(input()) 
b = float(3) 
while a < b: 
    print(a + 0.0001) 
    a+=0.0001 

此計算,但在浮動的盡頭有出現小數。他們爲什麼來到那裏,他們是什麼?

輸出:

enter image description here

+0

由於計算機不能以完美的準確度存儲浮點數。 – Christian

+3

是什麼讓你覺得他們是隨機的?另外,爲什麼要包含輸出的*圖片?閱讀[this](http://stackoverflow.com/q/1089018/3001761)或[this](http://stackoverflow.com/q/2986150/3001761)或[this](http://stackoverflow.com/q/1594985/3001761)或... – jonrsharpe

+1

[每位計算機科學家應該瞭解的浮點算法](http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html) –

回答

1

這是因爲在這個問題的數字沒有被二進制浮點精確地表示。從0.0001開始。該closest double precision value其實:

0.00010000000000000000479217360238592959831294137984514236450195312 5 

所以,當你寫0.0001你真正得到的是上面的數字。然後將它添加到您輸入的任何值,然後結果是最接近的表示值。

如果您對此感到震驚,那麼我建議您閱讀David Goldberg的永恆文章What Every Computer Scientist Should Know About Floating-Point Arithmetic

+0

請問'0.0001'的值可以多少位嗎? (我得到'0.0001000000000000004792173602385929598312941379845142364501953125'。) –

+0

@標記你是正確的。我錯誤地複製了rob頁面的值 –

相關問題