我從學習Python開始。目前,我有以下的小塊代碼:最後一位小數是隨機計數浮點數
a = float(input())
b = float(3)
while a < b:
print(a + 0.0001)
a+=0.0001
此計算,但在浮動的盡頭有出現小數。他們爲什麼來到那裏,他們是什麼?
輸出:
我從學習Python開始。目前,我有以下的小塊代碼:最後一位小數是隨機計數浮點數
a = float(input())
b = float(3)
while a < b:
print(a + 0.0001)
a+=0.0001
此計算,但在浮動的盡頭有出現小數。他們爲什麼來到那裏,他們是什麼?
輸出:
這是因爲在這個問題的數字沒有被二進制浮點精確地表示。從0.0001
開始。該closest double precision value其實:
0.00010000000000000000479217360238592959831294137984514236450195312 5
所以,當你寫0.0001
你真正得到的是上面的數字。然後將它添加到您輸入的任何值,然後結果是最接近的表示值。
如果您對此感到震驚,那麼我建議您閱讀David Goldberg的永恆文章What Every Computer Scientist Should Know About Floating-Point Arithmetic。
請問'0.0001'的值可以多少位嗎? (我得到'0.0001000000000000004792173602385929598312941379845142364501953125'。) –
@標記你是正確的。我錯誤地複製了rob頁面的值 –
由於計算機不能以完美的準確度存儲浮點數。 – Christian
是什麼讓你覺得他們是隨機的?另外,爲什麼要包含輸出的*圖片?閱讀[this](http://stackoverflow.com/q/1089018/3001761)或[this](http://stackoverflow.com/q/2986150/3001761)或[this](http://stackoverflow.com/q/1594985/3001761)或... – jonrsharpe
[每位計算機科學家應該瞭解的浮點算法](http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html) –