我在看譚浩強.C語言程序設計(第2版)時,在P18的2.1節中寫到:
所謂“標準化指數形式”是指這樣的指數:其數值部分是一個小數,小數點前的數字是零,小數點後的第一位數字不是零。一個實數可以有多種指數表示形式,但只有一種屬於標準化指數形式。
如0.123456×103是標準化指數形式。
實數在計算機內存中按照標準化指數形式存儲。
在P27中又寫到:
在2.1節中已說明了什麼是“規範化的指數形式”(其實沒有說明,只說了上面摘錄的“標準化指數形式”)。一個實數在用指數形式輸出時,是按規範化的指數形式輸出的。例如,指定實數5689.65按指數形式(%e格式)輸出,輸出的形式只能是5.68965e+003,而不會是0.568965e+004或56.8965e+002.
從上面2段話來看,我認爲C語言中的“標準化指數形式”和 “規範化的指數形式” 應該是不同的概念,“標準化指數形式”用於在存儲,“規範化的指數形式”用於輸出。
我又GOOGLE了下,發現大多數的情況是把“標準化指數形式”和 “規範化的指數形式”混爲一談,都說成是:小數點前必須有而且只有一位非零數字,也即前面所說的“規範化的指數形式”。
但我也看到了這樣的一個問題:規範化指數形式本來是1.23456e3的,爲什麼譚浩強的書上說實型數據在內存中以規範化指數形式存放,且小數部分是0.123456(十進制表達),而不是1.23456呢?(我認爲這個問題中的“規範化指數”應改爲“標準化指數”)其中有人這樣回答:1.23456要二進制存放需分別存整數部和小數部,而0.123456則只需存小數部,這樣在佔用相同字節的情況下,後一種方法可容納更大精度的浮點數. 我認爲上面的回答有道理(具體我也沒深入弄懂),好像也證明了我的觀點:C語言中的“標準化指數形式”和 “規範化的指數形式” 應該是不同的概念,“標準化指數形式”用於在存儲,“規範化的指數形式”用於輸出。
以下是關於更深層次的研究資料,我沒看懂(其實我沒有認真看,只是掃了幾眼),我現在沒有時間看得太深了啊,自己的知識水平也不允許。
基於IEEE 754的浮點數存儲格式分析研究