計算機計算浮點數出現的誤差
for i in range(20):
print(f" 0.1 * {i} = {0.1 * i}")
0.1 * 0 = 0.0
0.1 * 1 = 0.1
0.1 * 2 = 0.2
0.1 * 3 = 0.30000000000000004
0.1 * 4 = 0.4
0.1 * 5 = 0.5
0.1 * 6 = 0.6000000000000001
0.1 * 7 = 0.7000000000000001
0.1 * 8 = 0.8
0.1 * 9 = 0.9
0.1 * 10 = 1.0
0.1 * 11 = 1.1
0.1 * 12 = 1.2000000000000002
0.1 * 13 = 1.3
0.1 * 14 = 1.4000000000000001
0.1 * 15 = 1.5
0.1 * 16 = 1.6
0.1 * 17 = 1.7000000000000002
0.1 * 18 = 1.8
0.1 * 19 = 1.9000000000000001
浮點數的誤差的產生一般由于兩個原因
1)計算機內部以二進制保存,十進制的有限位的小數,在計算機內部會是一個無限位的小數。
例如 十進制的0.9雖然只有一位小數,轉成2進制是無限循環小數0.1110011001100110011...
2)計算機保存浮點數的精度有限,例如float可以保留十進制最多7位(二進制23位)有效數字,double 可以保留十進制15~16位(二進制52位)有效數字。那有效數字以后的就被忽略了。
例如上面的0.9的表示受精度所限,精度以后的就被忽略了,這樣
float時,它是0.89999998
double時,它是0.90000000000000002

浙公網安備 33010602011771號