IEEE 754浮點標準
阿新 • • 發佈:2019-01-01
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