2013年3月29日 星期五

浮點數float),是屬於有理數中某特定子集的數的數位表示,在電腦中用以近似表示任意某個實數。具體來說,這個實數由一個整數或定點數(即尾數)乘以某個基數(電腦中通常是2)的整數次得到,這種表示方法類似於基數為10的科學記數法
浮點計算是指浮點數參與的運算,這種運算通常伴隨著因為無法精確表示而進行的近似或舍入。
一個浮點數a由兩個數me來表示:a = m × be。在任意一個這樣的系統中,我們選擇一個基數b(記數系統的基)和精度p(即使用多少位來儲存)。m(即尾數)是形如±d.ddd...ddd的p位數(每一位是一個介於0到b-1之間的整數,包括0和b-1)。如果m的第一位是非0整數,m稱作正規化的。有一些描述使用一個單獨的符號位(s 代表+或者-)來表示正負,這樣m必須是正的。e是指數。
這種設計可以在某個固定長度的儲存空間內表示定點數,但無法表示的更大範圍的數。
例如,一個指數範圍為±4的4位元十進制浮點數可以用來表示43210,4.321或0.0004321,但是沒有足夠的精度來表示432.123和43212.3(必須近似為432.1和43210)。當然,實際使用的位數通常遠大於4。
此外,浮點數表示法通常還包括一些特別的數值:+∞和−∞(正負無窮大)以及NaN('Not a Number')。無窮大用於數太大而無法表示的時候,NaN則指示非法操作或者無法定義的結果。
其中,無窮大,可表示為inf,在內存中的值是,階碼為全1,尾數全0。而NaN則是階碼全1,尾數不全0。
電腦中的浮點數
浮點指的是帶有小數的數值,浮點運算即是小數的四則運算,常用來測量電腦運算速度。大部份電腦採用二進制(b=2)的表示方法。(bit)是衡量浮點數所需儲存空間的單位,通常為32位元或64位元,分別被叫作單精度雙精度。有一些電腦提供更大的浮點數,例如英特爾公司的浮點運算單元Intel8087協處理器(以及其被整合進x86處理器中的後代產品)提供80位長的浮點數,用於儲存浮點運算的中間結果。還有一些系統提供128位元的浮點數(通常用軟體實作)。
前向錯誤更正英語Forward error correction, 縮寫FEC)又稱之頻道編碼(channel coding)[1]是一種在單向通訊系統中控制傳輸錯誤的技術,通過連同數據發送額外的資訊進行錯誤恢復,以降低誤碼率(bit error rate, BER)。FEC又分為帶內FEC和帶外FEC。FEC的處理往往發生在早期階段處理後的數字信號是第一次收到。也就是說,糾錯電路往往是不可分割的一部分的類比到數字的轉換過程中,還涉及數字調製解調,或線路編碼和解碼。
FEC是通過添加冗餘訊息的傳輸採用預先確定的演算法。1949年漢明(Hamming)提出了可糾正單個隨機差錯的漢明碼。1960年Hoopueghem,Bose和Chaudhum發明了BCH碼,Reed與Solomon又提出ReedSolomon(RS)編碼,糾錯能力很強,後來稱之為里德-所羅門誤碼校正編碼(The reed-solomon error correction code, 即後來的附加的前向錯誤更正)。ITU-T G.975/G.709規定了「帶外FEC」是在SDH層下面增加一FEC層,專門處理FEC的問題。帶外FEC編碼冗餘度大,糾錯能力較強。FEC 有別於ARQ,發現錯誤無須通知發送方重發。一旦系統遺失了原始的數據封包,FEC 機制可以以冗餘封包加以補入。例如有一數據封包為「10」,分成二個封包,分別為「1」和「0」,有一冗餘封包「0」,收到任意兩個封包就能組裝出原始的包。但這些冗餘封包也會產生額外負擔。
二進位數字的乘法可用與十進位乘法相同的方法來做。由乘數的最低有效位元開始,將乘數的每個位元乘上被乘數,每次運算皆可產生一個部分積,而後續的部分積都要往左移
一位,最後將這些的部分積加總便可得到最後積。
                
二進位乘法運算
被乘數B1B0
乘數A1A0
A0*B1A0*B0
A1*B1A1*B0
C3C2C1C0



所以由左邊的乘法運算我們可以得知:
 C0=A0B0
 C1=(A0B1 + A1B0)的和
 C2=(A1B1 +(A0B1+A1B0)的進位)的和
 C3=(A1B1 +(A0B1+A1B0)的進位)的進位



下面所示即為乘法器的真值表:

B1B0A1A0C3C2C1C0
00000000
00010000
00100000
00110000
01000000
01010001
01100010
01110011
10000000
10010010
10100100
10110110
11000000
11010011
11100110
11111001


























下面所示為乘法器的邏輯電路圖:

漢明碼、CPU、暫存器

○漢明碼

漢明碼(Hamming Code),是在電信領域的一種線性偵錯碼,以發明者Richard Hamming的名字命名。漢明碼在傳輸的訊息流中插入驗證碼,以偵測並更正單一位元錯誤。由於簡單的漢明編碼,它們被廣泛應用於記憶體(RAM)。其 SECDED (single error correction, double error detection) 版本另外加入一檢測位元,可以偵測兩個以下同時發生的位元錯誤,並能夠更正單一位元的錯誤。因此,當傳送端與接收端的位元樣式的漢明距離 (Hamming distance) 小於或等於1時(僅有 1 bit 發生錯誤),可實現可靠的通訊。相對的,簡單的奇偶檢驗碼除了不能糾正錯誤之外,也只能偵測出奇數個的錯誤。



○CPU的意義

中央處理器(Central Processing Unit),是電子電腦的主要裝置之一。其功能主要是解釋電腦指令以及處理電腦軟體中的資料。電腦的可編程性主要是指對中央處理器的編程。中央處理器、記憶體和輸入/輸出裝置是現代電腦的三大核心部件。20世紀70年代以前,中央處理器是由多個獨立單元構成。後來發展出由積體電路製造的中央處理器,微處理器中央處理器複雜的電路可以做成單一微小功能強大的單元。

○CPU的組成

CPU為控制整部電腦運作的中心樞紐,其內部包括控制單元、算術及邏輯單元、暫存器或記憶單元。
1.算術及邏輯運算單元(ALU):加、減、乘、除及比較、選擇、判斷等運算。
2.控制單元(CU):翻譯程式中的指令的解碼功能及協調控制各部門依指令執行使電腦自動化處理資料。
3.記憶單元(MU):儲存目前正要被處理運算的程式或資料,容量以KB為單位。
4.暫存器(Register):暫時儲存資料,如用來儲存運算的累積器。其功能與記憶體相似。


○暫存器

暫存器(Register),是中央處理器內的其中組成部份。暫存器是有限存貯容量的高速存貯部件,它們可用來暫存指令、數據和位址。在中央處理器的控制部件中,包含的暫存器有指令暫存器(IR)和程式計數器(PC)。在中央處理器的算術及邏輯部件中,包含的暫存器有累加器(ACC)。
○暫存器的種類


累加器(Accumulator) : 它負責讀取運算元做運算, 並且將結果轉移到其它暫存器或記憶體內。
程式計數器PC (Program Counter):負責儲存CPU下一次所要執行的記憶體位址
指令暫存器IR (Instruction Register):負責儲存CPU所要執行的指令
堆疊指標器SP (Stack Pointer):負責儲存CPU目前使用的堆疊位址
記憶體位址暫存器MAR(Memory address register):負責儲存CPU所要存取記憶體資料的位址
記憶體緩衝暫存器MBR(Memory buffer register):為一緩衝區,儲存要進/出記憶體資料的資料。



○機器循環週期

1.擷取指令
2.解碼
3.執行
4.存回

浮點數

浮點數(Floating-point)表示法 = 符號 + 指數 + 假數或小數

  1. 符號 (sign):通常只是一個位元,用來表示正負符號。
  2. 指數 (exponent):有若干位元,用來表示基底的次方數。
  3. 假數或小數 (mantissa或fraction):有最多的位元,用來表示數值中真正有效的數字。



浮點數表示法中的「符號」位元,如同一般真假值般,以0表示正值,以1表示負值。「指數」位元在32位元的單倍準實數中有8位,在64位元的雙倍準實數中有11位,它們將真正小數點的位置偏移數轉化為基底的次方數
其中真正指數=偏移指數-127

故可知
偏移指數為0~255
真正指數為-127~0~128
例1 :  + 43.125
+43.125 = + 101011.001 = 1.01011001 x 2^ 5 
(由101011.001變成1.01011001x2^5的過程,稱為正規化)

所以
符號位元 = 0 (正)
指數部分 = 5 + 127= 132 = 10000100
假數部分 = 01011001000000000000000 (後方以0補滿)

所以 + 43.125 的單精度表示法 = 0 10000100 01011001000000000000000


例2 :  - 107.75
-107.75 = + 1101011.11 = 1.10101111 x 2^  6  所以
符號位元 = 1 (負)
指數部分  = 6 + 127= 133 = 10000101
假數部分 = 10101111000000000000000
所以 -107.75 的單精度表示法 = 1 10000101 10101111000000000000000