java 為什么浮點數(shù)運算會有誤差?
為什么浮點數(shù)運算會有誤差?完全地說,這并不是說“浮點數(shù)必須有錯誤”,而是“使用二進(jìn)制浮點數(shù)來表示十進(jìn)制小數(shù)在大多數(shù)情況下都會有錯誤?!?。比如十進(jìn)制0.1轉(zhuǎn)換成二進(jìn)制是一個無限循環(huán)浮點數(shù),尾數(shù)是無限的,
為什么浮點數(shù)運算會有誤差?
完全地說,這并不是說“浮點數(shù)必須有錯誤”,而是“使用二進(jìn)制浮點數(shù)來表示十進(jìn)制小數(shù)在大多數(shù)情況下都會有錯誤?!?。比如十進(jìn)制0.1轉(zhuǎn)換成二進(jìn)制是一個無限循環(huán)浮點數(shù),尾數(shù)是無限的,但實際存儲只能存儲幾個位,自然有錯誤。根據(jù)你的說法,十進(jìn)制也有錯誤。π不能完全用十進(jìn)制表示,1/3不能完全用十進(jìn)制表示
Java浮點數(shù)據(jù)類型有兩種:float和double。Float是單精度浮點,占32位,其對應(yīng)的封裝類是Float。Double是雙精度浮點,占64位,其對應(yīng)的封裝類是Double。有關(guān)float類和double類的詳細(xì)信息,請參閱javaapi。
注意
數(shù)據(jù)類型占用的位數(shù)范圍:
float表示3.4e-038~3.4e 038的數(shù)據(jù)范圍;
double表示1.7e-308~1.7e 308的數(shù)據(jù)范圍;
double比單精度類型float精度更高,表示范圍更大,并經(jīng)常用于科學(xué)計算等高精度場合。
變量定義示例
float f=123.456f//指定變量f為float類型
double D=123.456//指定變量D為double類型和默認(rèn)的浮點數(shù)類型
java浮點型數(shù)據(jù)表示方法有幾種,各是什么?
單精度有1個符號、8個指數(shù)和23個小數(shù)位。
雙精度是1號,11指數(shù),52十進(jìn)制。
單精度十進(jìn)制在計算機中只有23位(二進(jìn)制),轉(zhuǎn)換成十進(jìn)制只能保證6位十進(jìn)制數(shù)字的精度。超過此精度的十進(jìn)制運算(二進(jìn)制23,十進(jìn)制6)將被截取,導(dǎo)致精度損失和計算結(jié)果不準(zhǔn)確。
同樣,雙精度,十進(jìn)制是52(二進(jìn)制),轉(zhuǎn)換成十進(jìn)制只能保證15。