python中浮點數運算問題

2021-08-14 23:59:56 字數 1003 閱讀 9983

這是因為小數以二進位制形式表示時的

有窮性導致的。

我們知道,將乙個小數轉化為二進位制表示的方式是,不斷的乘2,取其中的整數部分。例如:

(1) 0.625*2 = 1.25, 整數部分為1,小數部分為0.25

(2) 0.25 * 2 = 0.5 , 整數部分為0,小數部分為0.5

(3) 0.5 * 2 = 1 , 整數部分為1,小數部分為0

所以0.625的二進位制表示就是0.101。

然而有些小數,例如0.4,並不能夠精確的轉化為二進位制表示,用上面的這種方法計算:

(1) 0.4*2=0.8 整數部分為0,小數部分為0.8

(2) 0.8*2=1.6 整數部分為1,小數部分為0.6

(3) 0.6*2=1.2 整數部分為1,小數部分為0.2

(4) 0.2*2=0.4 整數部分為0,小數部分為0.4

(5) 0.4*2=0.8 整數部分為0,小數部分為0.8

(6) 0.8*2=1.6 整數部分為1,小數部分為0.6

(7) 0.6*2=1.2 整數部分為1,小數部分為0.2

所以0.4轉化為二進位制,應該是0.0110... 這樣乙個

無限迴圈

小數。

計算機的記憶體、cpu暫存器等等這些

硬體單元都是有限的

,只能表示有限位數的二進位制位

,因此儲存的二進位制小數就會和實際轉換而成的二進位制數有一定的誤差。

這個不是python 的問題,所有基於二進位制的浮點數都會有這個問題,原因在於大部分浮點數轉換為二進位制後都是無限迴圈小數,而浮點數不可能用無限大的記憶體來儲存,所以會有捨入的誤差

所以在python中不建議直接將兩個浮點數進行大小比較,或者做精確的計算,往往會得到意想不到的結果。

當然,如果非要用,可以參考decimal

模組

浮點數運算

浮點數運算的公式 n m re n代表浮點數 m代表尾數 r代表基數 e代表指數 所謂浮點數就是類似我們高中學的科學計數法 比如 1000 就表示為 1.0 103 那麼浮點型計算就是兩個用科學計數法表示的數之間進行的計算 例如 1.0 102 1.19 103 該如何計算 步驟 1.對階 所謂對階...

浮點數運算

今天學習了浮點數運算 加減乘除 浮點數運算主要包括兩部分 指數運算和尾數運算。在ieee754標準下,指數運算就是階碼的運算,類似於無符號數運算。尾數運算是原碼運算。之前一直很疑惑為什麼前面的教材在介紹原碼運算 加減乘除 所舉的例子都是小數運算。現在猜想那部分內容可能只是為了浮點數運算做鋪墊,這裡才...

php 浮點數運算

php r echo 0.1 0.7 0.8 true false 了解浮點運算的都不難理解以上 執行時會得到false 這是因為很多的10進製數都不能精確的轉成2進製,或如果要精確轉換的話需要的二進位制數太長,會捨棄掉末尾部分,只儲存一定的精度。比如0.1 十進位制 0.0001100 1100 ...