2016-03-07 60 views
0

我是用Python一些簡單的數字加在一起,和我有一個奇怪的結果的Python增加了額外造成

>>> 16+4.8+6.4+0.48+1.92+.48 
30.080000000000002 

這顯然是不正確的答案,那麼爲什麼Python中添加額外的位? Python對於更復雜的計算有多可靠?

+0

你知道,這是一個重複。我搜索了它,我只是不知道該怎麼稱呼它。謝謝。 – MANA624

+1

我認爲大多數程序員在某個時候都被這個困惑了。稱之爲通道儀式:-) – Carpetsmoker

回答

2

罪魁禍首是浮點數學。

浮點運算:

你的語言不破,它做浮點運算。計算機只能本地存儲整數,所以它們需要一些表示十進制數的方法。這種表示有一定程度的不準確。這就是爲什麼,往往是,.1 + .2!= .3。 這是爲什麼發生?

其實很簡單。當你有一個基地系統(像我們這樣的基地系統)時,它只能表示使用基數的主要因素的分數。 10的主要因素是2和5.所以1/2,1/4,1/5,1/8和1/10都可以清楚地表示,因爲分母都使用10的素數因子。相反,1/3,1/6和1/7都是重複小數,因爲它們的分母使用3或7的素因子。在二進制(或基數2)中,唯一的素數因子是2.因此,您只能乾淨地表示分數只包含2個作爲主要因素。在二進制中,1/2,1/4,1/8將全部用小數表示。而1/​​5或1/10會重複小數。因此,0.1和0.2(1/10和1/5),而基數爲10的系統中的小數點後的小數點會在計算機運行的基本系統中重複小數點。當您對這些重複小數進行數學計算時,最終會得到剩餘的當您將計算機的基數2(二進制)數字轉換爲更具人類可讀性的基數10數字時,這些數字會繼續存在。

來源:http://0.30000000000000004.com/

相關問題