定義
定點數(fixed-point number)就是小數點位置固定的數,也就是說,小數點后面的位數是固定的,比如要記錄一筆賬目,這些賬目的數字都不會超過100,就可以使用2位小數位定點數來記錄,比如99.99,2.30,75.28;如果要更精確,可以使用3位小數位的定點數來記錄,比如7.668,38.235。
存儲方式
定點數的存儲方式很簡單,通常的方式就是對每一個十進制數進行BCD編碼,然后加上一個額外的符號位,0表示正數,1表示負數。由於需要使用整數個字節數來存儲定點數,所以依據不同情形,符號位可能使用4bit編碼,也可能使用8bit編碼。如果用4bit編碼符號位,加上數值位的bit數剛好是整數字節,那么就用4bit編碼編碼符號位,否則就用8bit編碼符號位。比如,對-9.99編碼,由於使用BCD編碼9.99需要1.5字節,那么使用4bit編碼符號位剛好就可以湊成2字節,編碼結果如下:0001 1001 1001 1001;如果對-99.99編碼,由於使用BCD編碼99.99剛好是2字節,那么對符號位就使用8bit編碼,編碼結果如下:0000 0001 1001 1001 1001 1001(藍色部分表示符號位編碼,紅色部分表示數值位編碼)。
注意對定點數的編碼,不需要對小數點位置進行編碼,因為小數點位置是固定的(對同一定點數表示方式來說)。
優缺點
定點數的優點就是可以精確表示想要表示的數值,不會像浮點數一樣計算機內部無法精確的表示一些數值,比如要表示[0,100)之間的任何兩位小數,定點數都能精確表示;
定點數的缺點就是不適用於表示特別大或者特別小的數值,比如要表示[0.00000000026,490000000000)之間的任何11位小數,那么就需要使用的字節高達12個(算上符號位)。
參考資料:
Code:The Hidden Language of Computer Hardware and Software第23章