計組之資料運算:9、浮點數的表示

一腔詩意千尋瀑發表於2020-09-23

思維導圖

在這裡插入圖片描述

定點數存在的問題:(浮點數產生的原因)

當我們要儲存一個數值時,需要考慮到數值的大小問題;例如,當儲存一個156時用char型即可,儲存8500時,用short型即可;但是當一個數值非常非常的大時,要怎麼進行儲存呢?例如我們要儲存2億億億億這麼大一個數,採用定點數的方式儲存就會產生問題。因此產生了浮點數。(浮點數的表示類似與科學計數法)

浮點數的表示格式

浮點數與科學計數法的比較

先來看一下十進位制的科學計數法
在這裡插入圖片描述

+3.026*10^11是十進位制的科學計數法,他可以拆分成5部分:
1、數值的符號:即第一個正號,又稱數符
2、數值的大小:3.026,又稱尾數
3、階碼的數值:11
4、階碼的底數:10(對於科學計數法為10,對於浮點數來說就為2,一般沒有特別說明是預設的,所以在儲存表示中不需要儲存)
5、階數的符號:即11前面隱含的正號,又稱階符

所以,在對科學計數法進行儲存時,需要儲存的有四部分:階符、階碼的數值、數符、尾數

類比與科學計數法,浮點數的儲存與其不同之處就在於階碼的底數,而在浮點數儲存中,預設為2^i,無特別說明為2

浮點數的格式

在這裡插入圖片描述

階碼:反映了浮點數的表示範圍及小數點的實際位置
尾數的數值部分位數:反映了浮點數的精度

浮點數與真值的轉化

在這裡插入圖片描述在這裡插入圖片描述

存在的問題

對於上圖中求真值b的過程中,無法用1B的儲存空間進行儲存(需要9位),這樣會捨棄最低位的1,結果會造成精度的丟失。所以,我們如何利用盡可能小的儲存空間儲存儘可能大的數值呢?因此產生了規格化的概念。

規格化

科學計數法的規格化

我們都知道,科學計數法要求小數點在數值的第一個有效位的後面;例如,我們表示235000,會寫成2.35x105而不會寫成235x103;這樣的規定就是科學計數法的規格化

浮點數的規格化方法

類比與科學計數法的規格化,規定尾數的最高位數值必須是一個有效值。
在這裡插入圖片描述
eg:
在這裡插入圖片描述

對於上文提到的求b的真值的過程,我們可以通過左規操作使b規格化,結果是可以用1B的儲存空間進行儲存(8位,上文中未左規9位)

浮點數規格化特點

在這裡插入圖片描述

倆個規格化的浮點數的加減操作:

階數:補碼,位數:原碼
a:00,010;00,0110
b:00,011;00,0101
1、求a,b真值

a:階數:2,尾數6,真值:6x22
b:階數:3,尾數5,真值:5x23

2、求a+b的值

1、求階差:011-010=001,階差為1
2、補階差:將階數小的與階數大的對齊,並進行移位保證a的數值不變
a:00,011;00,0011
3、尾數運算:0011+0101=1000
4、得出結果:a+b:00,011;00,1000
5、規格化:此結果以規格化;若非規格化則需要通過左規與右規進行規格化

待解決問題:

階碼、尾數用什麼碼合適?用多少位合適?如何定義一個標準可以進行不同計算機浮點數的通訊?見下篇部落格:IEEE754標準

相關文章