python把浮点数转换成16进制_如何用Python实现32位单精度浮点数转化为16位定点数?...

1. 对于特定的系统,首先假设有一组浮点数已经存在, 对该数据集使用任意方法/接口将它们构建为一个列表。(下面用一组随机生成数来测试)

2. 将浮点数数fd乘以2的n次方,得到定点数的int表示形式,数据集很有规律的话,这里的n或可以直接根据fd的动态范围肉眼观察直接估算出来一个常数。(肉眼观察法)

3. 也可以使用代码实现自动推导n,实现复用。策略很多,对于无符号数集,下面以实现列表中尽量多的浮点数据*2^n后仍然处于0~65535之间为目标。如果有多个n都满足这一点,则取最大的n。具体而言,由于输入数据是单精度数,且这里问题要求最终转化为16位定点数表示,那么最多遍历127+16就可以了,如果结果是24位定点数,那么就遍历127+24,最终转化定点数的bit宽度可以用fixed bit num设定。

4. 最终吐出的数据,对于转换后个别处于16位定点数表示范围以外的数(如有),做饱和截断处理,也就是大于65535的设为65535,其他范围内的数的浮点部分直接trunc,(当然也可以选用round,ceil,floor舍入)。这个"个别数"允许的个数用extra data num容限约束(不允许例外,或者说要求输入数据集全部满足在定点数表示范围内,那就设0)。输入列表中也可能有负数,这一情形的处理留给题主自己动手考虑下写代码,必然有所收获。

不考虑负数时的参考代码:

def calc_factor(fd_list, fixed_bit_num=16, extra_data_num=0):

if fixed_bit_num < 0:

raise Ex

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值