[編程小白]小數(shù)的精度是如何損失的?

本篇內容僅面向小白,如有錯誤,請指正。
本篇為原創(chuàng),轉載請注明出處。
初學編程,大家都知道,我們把小數(shù)叫做浮點數(shù),浮點數(shù)分為單精度浮點數(shù)(Float)和雙精度浮點數(shù)(Double),不管是什么精度,在計算機里面都是以二進制的方式存儲的。
要想知道精度為什么損失,我們先要知道浮點數(shù)是如何轉為二進制的。
舉個例子,把10.4轉為二進制,步驟是這樣的:
一、整數(shù)部分轉為二進制:
①取整數(shù)部分10,除以2,得5,余數(shù)是0,這個0是整數(shù)部分最右邊一位,即0
②將上一步的商再除以2:5÷2=2……1,這個余數(shù)是整數(shù)部分右邊第二位,即10
③重復第②步,把得到的余數(shù)依次寫到左邊,直到商為0。最終得到結果:1010

二、轉換小數(shù):
①先把整數(shù)部分轉為二進制,再加上小數(shù)點:1010.
②取小數(shù)部分乘以2:0.4×2=0.8
③取上面結果的整數(shù)部分,拼接到結果中:1010.0
④重復第②③步,直到小數(shù)部分變?yōu)?

最后我們得到了一個無限循環(huán)小數(shù):1010.01100110011001100110011……
但是我們知道,計算機中浮點數(shù)是有位數(shù)限制的,F(xiàn)loat是32位,Double是64位,而上面轉換之后的小數(shù)是無限位數(shù)的,所以存儲的時候會舍棄后面的小數(shù),這就導致了小數(shù)的精度損失。當然了,保留的位數(shù)越多,損失的精度越小,所以說Double精度更高,但是使用的資源也更多。如果對精度要求不那么高,也可以選Float。
使用多個損失了精度的小數(shù)進行運算,它們損失的精度可能會累加。


附:數(shù)字轉為二進制代碼:

調用方法及結果:
