2013-12-13 51 views
-3

我用下面的解釋在python操作和得到以下結果:簡單數學編程語言的奇怪行爲。操作

>>> 0.10*3 
0.30000000000000004 
>>> .10+.10 
0.2 
>>> 0.10 + 0.10 + 0.10 
0.30000000000000004 
>>> .2+0.1 
0.30000000000000004 
>>> _+.1 
0.4 

我的問題是,在0.30000000000000004如何000000000004從何而來?

這不僅在Python中,而且在JS中,我也假設其他語言。

+4

搜索,以便爲主題'浮點arithmetic'。你問的問題每週被問到100次,幾乎和經常一樣回答。 –

+0

檢查這個小夥子。 http://stackoverflow.com/questions/18995148/floatingpoint-arithmetic-error 這個問題在SO中發生了很多。 – johnny

回答

3

爲什麼我的數字,比如0.1 + 0.2加起來不錯的一輪0.3,而是我得到一個奇怪的結果,如0.30000000000000004?

因爲在內部,計算機使用的格式(二進制浮點)不能準確地表示數字,如0.1,0.2或0.3。

編譯或解釋代碼時,您的「0.1」已經以該格式四捨五入到最接近的數字,即使在計算髮生之前,這也會導致小的舍入誤差。

十進制數不能準確地表示一個數字,比如1/3,所以你必須舍入到0.33這樣的東西 - 而且你不希望0.33 + 0.33 + 0.33加起來爲1,你呢?

計算機使用二進制數字,因爲它們處理這些數字時速度更快,而且由於對於大多數計算來說,小數點後17位的小錯誤根本不重要,因爲您使用的數字不是圓形(或無論如何,這是精確的)。

http://floating-point-gui.de/basic/

這應該有助於