浮點數/規範化
您可能已經熟悉了浮點數的科學或指數表示法中的大多數概念。例如,數字 123456.06 可以用指數表示法表示為 1.23456e+05,這是一種簡寫表示法,表示尾數 1.23456 乘以基數 10 的 5 次方。
更正式地說,浮點數的內部表示可以用以下引數來表徵:符號可以是 -1 或 1。指數的基數或底,是一個大於 1 的整數。對於特定表示,這是一個常數。指數,底數被提升到的冪。指數值的上下限是特定表示的常數。
有時,在實際表示浮點數的位中,指數會透過新增一個常數來進行偏差,以使其始終被表示為無符號量。只有在您有某些理由手動拆解構成浮點數的位欄位時,這才是重要的,而 GNU 庫對此沒有提供任何支援。因此,在接下來的討論中,我們將忽略這一點。尾數或有效數字是一個無符號整數,是每個浮點數的一部分。尾數的精度。如果表示的基數是 b,則精度是指尾數中 base-b 位的數量。對於特定表示,這是一個常數。
許多浮點表示在尾數中都有一個隱式的隱藏位。這是一個實際上存在於尾數中的位,但沒有儲存在記憶體中,因為它在規範化的數字中始終為 1。精度數字(見前文)包括任何隱藏位。
同樣,GNU 庫不提供任何用於處理此類低階表示方面的工具。浮點數用於增強表示範圍
浮點數的尾數表示一個隱式分數,其分母是基數的精度次方。由於最大的可表示尾數比此分母(基數的精度次方)小 1,因此分數的值始終嚴格小於 1。浮點數的數學值然後是這個分數、符號和基數的指數的乘積。
如果分數至少為 1/b,其中 b 是基數,則我們說浮點數是規範化的。換句話說,如果尾數乘以基數,則會太大而無法容納。非規範化的數字有時被稱為非規格化;它們包含的精度低於表示通常可以容納的精度。
如果數字不是規範化的,則可以從指數中減去 1,同時將尾數乘以基數,並獲得另一個具有相同值的浮點數。規範化包括重複執行此操作,直到數字被規範化。兩個不同的規範化浮點數在值上不能相等。
(此規則有一個例外:如果尾數為零,則它被認為是規範化的。另一個例外發生在某些機器上,其中指數與表示可以容納的最小指數一樣小。然後,不可能從指數中減去 1,因此即使其分數小於 1/b,數字也可能是規範化的。)