1. 程式人生 > >float和double的精度計算

float和double的精度計算

Java浮點數的取值範圍與其精度,必須先了解浮點數的表示方法,浮點數的結構組成:由符號位,指數位,尾數位組成。 Java中浮點數採用的是IEEE 754標準。 一個float4位元組32位,分為三部分:符號位,指數位,尾數位 符號位(S):最高位(31位)為符號位,表示整個浮點數的正負,0為正,1為負 指數位(E):23-30位共8位為指數位, 尾數位(M):小數部分最高有效位是1的數被稱為正規(規格化)形式。小數部分最高有效位是1的數被稱為正規(規格化)形式。小數部分最高有效位是0的數被稱為非正規(非規格化)形式,其他情況是特殊值,即形式為1.M或0.M,至於什麼時候是 1 什麼時候是 0,則由指數和尾數共同決定。 float的範圍為-2^128 ~ +2^127,也即-3.40E+38 ~ +3.40E+38

double:符號位1位,指數位11位,尾數位52位

float指數的取值範圍為-126~127,double指取的取值數範圍為-1022至1023 float和double的【精度】是由【尾數的位數】來決定的,float的尾數位有23位,double的尾數位有52位

float:2^23 = 8388608,一共七位,由於最左為1的一位省略了,這意味著最多能表示8位數: 2*8388608 = 16777216 。有8位有效數字,但絕對能保證的為7位,也即float的精度為7~8位有效數字; double:2^52 = 4503599627370496,一共16位,同理,double的精度為16~17位。