最主要的原因是按照整數這種定位數去在計算機中儲存,存的數量沒有滿足到需求。譬如
暫存器只有4位的話,儲存整數最多儲存10000個,範圍是0~9999。
1 04
=10000
10^4 = 10000
104=10
000如果是小數呢,加入小數點固定在中間,如99.99,儲存的數量也是10000。那麼9.999怎麼儲存呢,向左移動一位就好了啊,是的,那麼就用到科學計數法。
9999×1
0−3=
9.999
9999 \times 10^ = 9.999
9999×1
0−3=
9.99
9這種可以控制小數點變動的就叫做浮點數。
浮點數,是屬於有理數中某特定子集的數的數字表示,在計算機中用以近似表示任意某個實數。具體的說,這個實數由乙個整數或定點數(即尾數)乘以某個基數(計算機中通常是2)的整數次冪得到,這種表示方法類似於基數為10的科學計數法。用科學計數法的方式就可以滿足儲存的要求。
表示式如下:(−1
)s×1.
f×2e
(-1)^s \times 1.f \times 2^e
(−1)s×
1.f×
2e 精度
符號位數
指數字數
有效位32位單精度18
2364位雙精度111
52按照ieee 754規定的,而且有效位小數點左邊的數字為1的情況,就是規約形式的浮點數。
由於這種表示下的尾數有一位隱含的二進位制有效數字,為了與二進位制科學計數法的尾數(mantissa)相區別,ieee754稱之為有效數(significant)。為什麼叫有效位呢?因為按照約定,小數點左邊的1是固定的,所以在儲存器層面上不會儲存這個位,同時為儲存的位數增加了一位,按照32位來說,有效位就是23位(如果要儲存小數點左邊的1只有22位)。
以32位為例子,指數字可以表示的範圍大概如下,大概就是0~256
2 8=
2562^8 = 256
28=256
按照32位來看,那麼負數怎麼辦?ieee 754就想到個折中的辦法,切割一般給負數吧。
-127~-1共127個負數,1~128共128個正數,還有0這個自然數,總共256個值。
最小值(−1
)−1×
1.00000000000000000000000×2
255(-1)^ \times 1.00000000000000000000000 \times 2^
(−1)−1
×1.0
0000
0000
0000
0000
0000
00×2
255最大值
( −1
)0
×1.00000000000000000000000×2
255(-1)^0 \times 1.00000000000000000000000 \times 2^
(−1)0×
1.00
0000
0000
0000
0000
0000
0×22
55絕對值最小值
( −1
)0
×1.00000000000000000000000×2
0(-1)^0 \times 1.00000000000000000000000 \times 2^
(−1)0×
1.00
0000
0000
0000
0000
0000
0×20
那麼儲存在計算機儲存器怎麼辦?負數怎麼表示,難道又要儲存符號位?
為了提公升效率,ieee 754想到通過類似移位的方式就可以完成操作,因為這部分直接在電路就可以完成。而且還可以增加一位的儲存空間,一舉兩得。
表示值移位值
儲存值-127
1270
-126
1271
-125
1272。。
。。。。
0127
127。。。
。。。125
127253
126127
254127
127255
最小值(−1
)−1×
1.00000000000000000000000×2
−126
(-1)^ \times 1.00000000000000000000000 \times 2^
(−1)−1
×1.0
0000
0000
0000
0000
0000
00×2
−126
最大值(−1
)0
×1.00000000000000000000000×2
127(-1)^0 \times 1.00000000000000000000000 \times 2^
(−1)0×
1.00
0000
0000
0000
0000
0000
0×21
27絕對值最小值
( −1
)0
×1.00000000000000000000000×2
−126
(-1)^0 \times 1.00000000000000000000000 \times 2^
(−1)0×
1.00
0000
0000
0000
0000
0000
0×2−
126如果浮點數的指數部分(e)的編碼值是0,分數部分非零,那麼這個浮點數將被稱為非規約形式的浮點數。非規約形式按照如下表示(這部分的轉換在電路層面應該完成了):
在 e 為 0 且 f 為 不全為0 的時候,就按照以下公式
( −1
)s×0.
f×2e
(-1)^s \times 0.f \times 2^e
(−1)s×
0.f×
2e這個時候你會想,0(-126)和255(128)到**去了?他們用於0和溢值上面了。
在 e 為 255 且 f 為 0 的時候,我們就把這個浮點數認為是 無窮大。
還有就是超過了範圍的,因為32位是有限的,上下限超過了,自然就沒辦法用浮點數來表示了,這種情況就是無窮值。
在 e 為 255 且 f 為 非0 的時候,我們就把這個浮點數認為是 nan。
最後就是nan值,有些算數表示式沒辦法表示的,如負數開平方。
總結以下:
指數字 (e)
有效位(f)
符號(s)表示0
00或100
非00或1
非規約0.f
2550
0正無窮
2550
1負無窮
255非0
0或1nan
計算機組成之浮點數
符號位 資料的正負號標誌 正1負0。尾數部分 轉化成二進位制後的小數部分,其餘尾數補零。指數部分 1.轉化成二進位制後,再轉化成科學計數法 二進位制 如果是原來資料的左移得到的資料指數部分最高位為1,右移為0,其餘七位的計算方法 科學計數法的指數資料大小 1後用補碼計算數值。2.計算得出二進位制科學...
計算機組成原理中的浮點數
一 目前通用的ieee754浮點數值的計算公式要更加複雜與精妙 v 1 s m 2e 公式1 1.乙個32位的ieee浮點數的位向量分為三個部分 0 符號位 00000000 階碼位 00000000000000000000000 小數字 從右起,0 23位為小數字,24 31位為階碼位,32位最高...
計算機組成原理之定點數與浮點數
計算機中常用的資料表示形式 定點數 浮點數。定點數 小數點的位置固定不變 分為定點定點整數和定點小數 1 定點小數 純小數 小數點隱含固定在最高資料位的左邊,所以整數字就是最高位用來表示符號位 計算機中儲存為 1010111 第一位1為符號位,表示負數 實際含義 0.010111 2 定點整數 純整...