计算机浮点数表示范围是怎么算出来的??
- 提问者网友:刺鸟
- 2021-07-31 05:48
- 五星知识达人网友:骨子里都是戏
- 2021-07-31 07:04
计算机浮点数表示范围被电气电子工程师协会(IEEE)规范化为IEEE 754
以下引用WIKI,地址: http://zh.wikipedia.org/wiki/IEEE_754
IEEE 754規定了四種表示浮點數值的方式:單精確度(32位元)、雙精確度(64位元)、延伸單精確度(43位元以上,很少使用)與延伸雙精確度(79位元以上,通常以80位元實做)。只有32位元模式有強制要求,其他都是選擇性的。大部分程式語言都有提供IEEE格式與算術,但有些將其列為非必要的。例如,IEEE 754問世之前就有的C語言,現在有包括IEEE算術,但不算作強制要求(C語言的float通常是指IEEE單精確度,而double是指雙精確度)。
二進位浮點數是以符號數值表示法格式儲存,將最高效位元指定為符號位元(sign bit);「指數部份」,即次高效的e位元,為浮點數中經指數偏差(exponent bias)處理過後的指數;「小數部份」,即剩下的f位元,為有效位數(significand)減掉有效位數本身的最高效位元。
指數偏差指數偏差(表示法中的指數為實際指數減掉某個值)為 2e-1 - 1,參見有符號數處理的Excess-N。減掉一個值是因為指數必須是有號數才能表達很大或很小的數值,但是有號數通常的表示法—— 二補數表示法(two's complement),將會使比較變得困難。為了解決這個問題,指數在存儲之前需要做偏差修正,將它的值調整到一個無符號數的範圍內以便進行比較。此外,指數采用這種方法表示的優點還在于使得浮點數的正規形式和非正規形式之間有了一個平滑的轉變。
[编辑] 範例小數部分最高有效位由指數部分決定。如果指數在0 < exponent < 2e − 1之間,那么小數部分最高有效位將是1,而且這個數將被稱為正規形式。如果指數是0,有效數最高有效位將會是0,并且這個數將被稱為非正規形式。這里有三個特殊值需要指出:
- 如果 指數 是0 并且 小數部分 是0,這個數±0(和符號位相關)
- 如果 指數 = 2e − 1 并且 小數部分 是0,這個數是 ±無窮大(同樣和符號位相關)
- 如果 指數 = 2e − 1 并且 小數部分 非0,這個數表示為不是一個數(NaN)。
以上規則,總結如下:
形勢 | 指數 | 小數部分 |
---|---|---|
零 | 0 | 0 |
非正規形式 | 0 | 非0 |
正規形式 | 1 到 2e − 2 | 任意 |
無窮 | 2e − 1 | 0 |
NaN | 2e − 1 | 非零 |
單精度二進制小數,使用32個位元存儲。
指數部分即使用所謂的偏正值形式表示,實際值為表示值與一個固定值(32位的情況是127)的和。采用這種方式表示的目的是簡化比較。因為,指數的值可能為正也可能為負,如果采用補碼表示的話,全體符號位S和Exp自身的符號位將導致不能簡單的進行大小比較。正因為如此,指數部分通常采用一個無符號的正數值存儲。單精度的指數部分是−126~+127加上127 ,指數值的大小從1~254(0和255是特殊值)。浮點小數計算時,指數值減去偏正值將是實際的指數大小。
64位雙精度雙精度二進制小數,使用64個位元存儲。
指數部分即使用所謂的偏正值形式表示,實際值為表示值與一個固定值(64位的情況是1023)的和。采用這種方式表示的目的是簡化比較。因為,指數的值可能為正也可能為負,如果采用補碼表示的話,全體符號位S和Exp自身 的符號位將導致不能簡單的進行大小比較。正因為如此,指數部分通常采用一個無符號的正數值存儲。雙精度的指數部分是−1022~+1023加上1023 ,指數值的大小從1~2046(0(2進位全為0)和2047(2進位全為1)是特殊值)。浮點小數計算時,指數值減去偏正值將是實際的指數大小。