我正在处理一个要求我将浮点数的十六进制和二进制FP16表示转换为十进制浮点数的问题。我还需要将十进制浮点数转换为FP16十六进制和二进制表示。
FP32数的转换有很多种解决方案。但我特别需要FP16表示。
我已经找到了FP16二进制到十进制浮点数的解决方案:
a = struct.pack("H",int("0010100011110101",2))
float = np.frombuffer(a, dtype =np.float16)[0]基本上我想要的是:
FP16二进制->十进制浮点数(0010100011110101 -> 0.0387268066)
FP16十六进制->十进制浮点数(28f5 -> 0.0387268066)
十进制浮点数-> FP16二进制(0.0387268066 -> 0010100011110101)
十进制浮点数-> FP16十六进制(0.0387268066 -> 28f5)
发布于 2019-05-30 06:06:13
所以,经过一番研究,我找到了解决方案,我在这里发布给任何可能需要同样答案的人。
import struct
import numpy as np
bin = "0010100011110101"
hex = "28f5"
dec_float = 0.03872680FP16二进制到十进制浮点数
y = struct.pack("H",int(bin,2))
float = np.frombuffer(y, dtype =np.float16)[0]FP16十六进制到十进制浮点数
y = struct.pack("H",int(hex,16))
float = np.frombuffer(y, dtype =np.float16)[0]十进制浮点数到FP16二进制
binary = struct.unpack('H',struct.pack('e',dec_float))[0]
binary = bin(binary)
binary = binary[2:]
binary = "0"*2 + binary十进制浮点数到FP16十六进制
hexa = struct.unpack('H',struct.pack('e',dec_float))[0]
hexa = hex(hexa)
hexa = hexa[2:]https://stackoverflow.com/questions/56361357
复制相似问题