浮点数改为定点数-python

最近在做工程时查阅“Deep Learning with Limited Numerical Precision”论文,偶然搜到一位博主的文章,借用了其编写的浮点数转定点数函数。
原博主所写代码仅适用于单个数字的转换,效率较低,我在他的基础上对其进行简单的修改,加快了运算速度,故展示出来与君共享!

参考博主的链接: 对论文 Deep Learning with Limited Numerical Precision 的理解与结论的验证.
此代码借用了numpy的数组

import numpy as np
FL = 5			# 用5bit表示小数部分
IL = 8 - FL		# 用3bit表示整数部分(1bit为符号位,2bit为整数)
MIN = -(1<<(IL-1))
MAX = -MIN - 2**(-FL)

def float_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 = 1
    for 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
def float_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
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值