缝缝补补的浮点数进制转换器

电子说

1.3w人已加入

描述

背景

浮点数在计算机科学中是一种重要的数据类型,用于表示实数。其中,FP32和FP16是两种常见的浮点数格式,分别占用32位和16位。

这两种浮点数遵循IEEE 754浮点数标准,该标准规定了浮点数的表示和运算方式。每个浮点数由三个部分组成:符号位S、指数位E和尾数位M。

FP32的二进制表示为:SEEEEEEE_EMMMMMMM_MMMMMMMM MMMMMMMM;FP16的二进制表示为:SEEEEEMM _MMMMMMMM。

而二进制十进制和十六进制是我们在芯片设计和验证时候直观面对的数值进制。在设计浮点数运算单元或浮点数处理和转换单元时,时常需要进行浮点数与进制数以及原码补码之间的各种转换。

这个工具就是解决这个问题的,基于Python的struct模块进行浮点数的转换,基于int/bin/hex函数进行普通进制转换。

工具使用

根目录下有打包好的exe文件

怎么说呢,这个logo基本代表了我的最高审美了。点开工具后就是这个界面了:

转换器

输出格式就支持这么多种了,对应的输入少一些,不过也够用了:

转换器

然后呢,选择输入格式后输入对应的数值(请正确输入啊,我没有做检错功能哈),然后点击“确定”(不要用回车啊)就可以了。十进制下可以任意输入数值(正数负数小数等),如果为浮点数则只有FP32和FP16会有反馈。其他进制不能有小数,且不需要0b、0x的前缀:

转换器

转换器

转换器

结果校验

源码修改

如果需要修改源码,可以在工程目录下的src文件夹内进行:

转换器

由上到下分别是图形界面主程序、杂项函数和进制转换函数。进制转换函数全部为字符串输入、字符串输出:

def float_to_hex_fp16(i: str) -> str:
f = float(i)
#old_h = hex(struct.unpack(' #old_h = str(old_h)[2:]
#第二种方式和第一种方式结果其实一样的
packed_data = struct.pack('!e', f)
h = ''.join(format(byte, '02x') for byte in packed_data)
#return str(h)[2:]
return str(h)',>

程序生成

如果需要重新生成exe文件,可以在工程目录下的exe文件夹内双击install.bat文件执行,然后把生成于dist目录下的main.exe拷出来就可以了。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分