binary16 en Python
-
17-09-2020 - |
Question
L' struct
le module est utile lorsque vous essayez de convertir des données vers et à partir de formats binaires.Cependant, récemment, je suis tombé sur une spécification de format de fichier qui utilise le binary16 format à virgule flottante.J'ai regardé à travers la documentation Python, mais ne peut pas trouver quelque chose qui peut convertir vers et à partir d'elle.Quel serait le meilleur moyen de convertir ces données vers/à partir de Python flotteurs?
La solution
Vous pouvez le faire à peu près que vous le feriez dans C - I.e., je pense, à peu près à ceci ...:
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
Autres conseils
Ce gars post de blog donne une mise en œuvre dans les deux et python.Il utilise le struct
module, puis décode manuellement.Il n'est pas du tout compliqué de conversion.
Une recherche rapide Google a été allumée http://packages.python.org/bigfloat/ qui dit qu'il a un contexte pour la manipulation des nombres de points flottants geniègoDiceCode.Je ne connaissais pas moi-même avec le paquet moi-même, alors je ne pouvais donc rien vous dire sur la façon de l'utiliser (au moins, rien de plus que vous ne pouvez vous lire dans la documentation).