Binario16 en Python
-
17-09-2020 - |
Pregunta
la struct
El módulo es útil cuando intenta convertir datos yde formatos binarios.Sin embargo, recientemente me encontré con una especificación de formato de archivo que usa el formato de punto flotante binario16 .Miré a través de la documentación de Python, pero no puedo encontrar nada que pueda convertirlo y de él.¿Cuál sería la mejor manera de convertir estos datos a / desde Python Floots?
Solución
Puedes hacerlo aproximadamente como lo harías en C - I.E., creo, aproximadamente así ...:
def tofloat(b16):
sign = -1 if b16 & 0x8000 else +1
expo = ( b16 & 0x7C00 ) >> 10
prec = b16 & 0x03FF
if expo == 0:
return sign * (2.0 ** -24) * prec
elif expo == 0x1F:
return sign * float('inf')
prec |= 0x0400
return sign * (2.0 ** (expo - 25)) * prec
Otros consejos
El post de blog de este tipo daUna implementación en ambos y Python.Utiliza el módulo struct
, luego la decodifica manualmente.No es todo lo que complicado una conversión.
Una búsqueda rápida de Google se presentó http://packages.python.org/bigfloat/ Lo que dice que tiene un contexto para la manipulación de los números de punto de flotación de binary16
.Sin embargo, no estoy familiarizado con el paquete, por lo que no pude decirle nada sobre cómo usarlo (al menos, nada más de lo que puede leer en la documentación).