1. 程式人生 > >IEEE 754浮點標準

IEEE 754浮點標準

java和C都遵循IEEE 754浮點數標準wiki介紹. 先來回顧一下科學記數法, 比如123這個數字, 使用科學記數法, 可以寫作:
1.23 x 102

計算機的世界都是二進位制的, 123的二進位制為1111011, 可以記為:
1.111011 x 26
其中整數位1為固定值, 有效資訊有小數位0.111011和指數6
雙精度的浮點數的表示方式為:

     63          62 .... 52           51  ......    0
     符號位sign   指數偏移exp(11bit)   小數fraction(52bit)
區域 說明
符號位 0為正數, 1表示負數
指數偏移 實際指數+1023, 這麼做是為了將負指數轉換成正值; 對於數字0, 這個值為0
小數 小數點後面的二進位制; 對於數字0, 則全為0

繼續以double型別的123舉例
sign = 0
exp = 1023 + 6 = 1029 = 10000000101B, 不足11bit, 則在前面補0
fraction = 111011, 不足52bit, 則在後面補0
完整的二進位制形式為
0 1000000 0101 1110 11 00 00000000000000000000000000000000000000000000
轉換成16進製為 40 5E C0 00 00 00 00 00
在小端位元組序的系統上(低位存放在低位元組上), 顯示為 00 00 00 00 00 C0 5E 40

計算double能表達的最大值
指數能達到的最大值為211-1023 = 1024,
因此double最大值為1.fffffffffffff x 21024 = 1.7976931348623157e+308