工作中遇到了需要將浮點運算轉化為定點運算的情況。現在把我這幾天研究拿出來和大家分享。
1. 如何表示乙個既有整數部分也有小數部分的數?
使用定點表示這樣的數需要固定小數點的位置。用n位元表示該數,則小數點位置在某個位置,小數點左邊用來表示整數,小數點右邊表示小數。如
1110.1010 0011.0010
整數 小數 整數 小數
上面8bit的高4位用來表示整數,低4位用來表示小數。
2. 根據需要表示的數的範圍確定使用的位元數n。
用n位元表示乙個無符號的有理數,用a位元表示整數,用b位元表示小數,則有n = a + b。能表示的無符號數的範圍為0 到2^a - 2^(-b)。
如果表示有符號的有理數,則在n位元中,還需要用用c位元表示符號。則有n = a + b + c。表示的數範圍為-2^a到2^a - 2^(-b)。
小數部分使用的位元數b,決定了該定點數的精度
b 精度
1 0.5
2 0.25
3 0.125
4 0.0625
8 0.00390625
16 0.0000152587890625
24 0.000000059604644775390625
32 0.00000000023283064365386962890625
如需要表示1987.7891,則整數部分至少需要11位(不包括符號)。精確到小數點四位,則精度至少要小於0.0001,則至少需要14位。考慮需要表示數的最大範圍確定選用的位元數。
3. 如何用c語言進行定點運算。
舉例進行說明。
表示精度為0.0001 用16位(小數部分)
符號位 用2位
整數 用14位
這樣可表示得數的範圍為-16384到16383.9999847412109375
進行四則運算就不需要我說了吧。加減乘除在計算機組成原理中已經有很清楚的表述了。需要說明的是進行除法時如果使用加減交替法,則當乙個很大的數處以乙個很小的數時,則進行除法的次數會相當的大,因此這種情況下進行優化的空間非常大。
就寫到這裡了。
聯絡俺:041021018@fudan.edu.cn
DSP定點運算
在定點dsp晶元中,採用定點數進行數值運算,其運算元一般採用整型數來表示。乙個整型數的最大表示範圍取決於dsp晶元所給定的字長,一般為16位或24位。顯然,字長越長,所能表示的數的範圍越大,精度也越高。數的定標 由程式設計師來確定乙個數的小數點處於16位中的哪一位 通過設定小數點在16位數中的不同位...
FPGA定點運算
1 定點小數運算 所謂定點小數,實際上就是用整數來進行小數運算。以16bit的儲存單位最多可以表示0x0000到0xffff,65536種狀態,如果表示無符號整數的話,就是從0到65535.如果需要表示負數的話,那麼最高位就是符號位,而剩下的15位就可以表示32768種狀態。對於計算機來說,符號並沒...
定點運算(一) 移位運算
移位 為什麼要移位?在計算機裡面,移位操作可以與加減法操作一起構成乘除法運算。注意 因為計算機裡面沒有專門的硬體來表示小數點,小數點是人為約定的 這就說明小數點的位置是不可變的。即移位操作動的是資料而不是小數點。移位的規則 符號位不變,因為負數移位之後還是負數,不可能因為乙個移位就變成正數了,下面是...