最近在做工程時查閱「deep learning with limited numerical precision」**,偶然搜到一位博主的文章,借用了其編寫的浮點數轉定點數函式。
原博主所寫**僅適用於單個數字的轉換,效率較低,我在他的基礎上對其進行簡單的修改,加快了運算速度,故展示出來與君共享!
import numpy as np
fl =
5# 用5bit表示小數部分
il =
8- fl # 用3bit表示整數部分(1bit為符號位,2bit為整數)
min =-(
1<<
(il-1)
)max =
-min -2**
(-fl)
deffloat_to_fixed_array
(x):
global min, max, fl
x = np.clip(x,min,max)
sig = np.ones(x.shape)
# 符號位
idx = np.where(x<0)
sig[idx]=-
1 x =
abs(x)
q = np.trunc(x)
x -= q # 此時x為小數部分
e =1for i in
range
(fl)
: x *=
2 e /=
2 idx_1 = np.where(x>=1)
x[idx_1]-=1
q[idx_1]
+= e
idx_2 = np.where(x>=
0.5)
q[idx_2]
+= e
q *= sig
q = np.clip(q,min,max)
return q
deffloat_to_fixed_array_new
(x):
# 此版本的結果與上一版本一致,運算速度快於上個版本
global min, max, fl
x = np.clip(x,min,max)
idx = np.where(x<0)
x =abs(x)
q = np.trunc(x)
x -= q # 此時x為小數部分
x = np.rint(
(x *(2
** fl))/
1)*(
1/(2
** fl)
) q = q + x
q[idx]=-
1*q[idx]
q = np.clip(q,min,max)
return q
浮點數 定點數
浮點數是表示小數的一種方法.所謂浮點就是小數點的位置不固定,與此相反有定點數,即小數點的位置固定.整數可以看做是一種特殊的定點數,即小數點在末尾.8086 8088中沒有浮點數處理指令,不過從486起,cpu內建了浮點數處理器,可以執行浮點運算.一般的浮點數有點象科學計數法,包括符號位 指數部分和尾...
定點數和浮點數 定點數和浮點數計算
這個東西其實不是很難,但是確實足夠繞的,因為從十進位制的加減乘除轉換到二進位制的加減乘除就已經很麻煩了,然後為了選拔人才,不給你二進位制,直接給你十六進製制,當然最麻煩的還是補碼和移碼,確實足夠 但是給予足夠的練習還是可以比較熟練的,公式稍後會整理到置頂的公式大全中。可以看完了以後去嘗試一下相關計算...
定點數與浮點數
1 定點數 定點數指小數點在數中的位置是固定不變的,通常有定點整數和定點小數。在對小數點位置作出選擇之後,運算中的所有數均應統一為定點整數或定點小數,在運算中不再考慮小數問題。1 定義 資料中小數點位置固定不變的數 2 種類 定點整數 3 小數點在符號位與有效位之間。注 定點數受字長的限制,超出範圍...