簡體   English   中英

為什么 Java 中浮點數(32 位)的指數是 -126 而不是 -128?

[英]Why is the Exponent for Float (32 Bit) in Java -126 and not -128?

32 位標准:

1 位用於數字的正/負值。 指數為 8 位,尾數為 24 位。

Exponent 8 位,即 1 * 2^7 + 1 * 2^6 +... = 255 當最大 Exponent 為 127 時,最小 Exponent 應為 -128,因此 126 + 128 = 255。

但是為什么 Java 說最小指數是-126? 255 - (127+126)= 2,所以我們沒有使用兩個數字。

這個數字有一個“偏見”,這些位是什么? 首先從中減去0x7F以獲得您的值。 使用值0x01達到最低指數: 0x01 - 0x7F = 1 - 127 = -126 最高值達到0xFE : 0xFE - 0x7F = 254 - 127 = 127

但是,指數值0x000xFF發生了什么? 這就是為什么有 254 個而不是 256 個可用的唯一指數:這兩個是特殊的魔法,通常不可用。 指數 0 既用於編碼 0(如果分數的數字也是 0),也用於編碼所謂的次正規數,即非常接近 0 的數字。

0xFF用於特殊值; 這就是浮點數如何存儲NaN和兩個無窮大。

有 2 個指數序列編碼特殊值。 所有 0 編碼 0 或次正規,具體取決於尾數。 所有 1 都編碼 Infinity 或 NaN。 這意味着就像你說的那樣,有 254 個序列來編碼正常數字,而不是 256 個指數序列。

因此,指數 00000001 編碼冪 -126 和 11111110 編碼冪 127 是有意義的。這是正常數字的指數范圍。

https://en.wikipedia.org/wiki/Single-precision_floating-point_format

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM