binary16 em Python
-
17-09-2020 - |
Pergunta
O struct
módulo é útil quando você está tentando converter dados de e para formatos binários.No entanto, recentemente me deparei com uma especificação de formato de arquivo que usa o binary16 formato de ponto flutuante.Eu olhei através da documentação Python, mas não pode encontrar qualquer coisa que pode converter de e para ele.Qual seria a melhor maneira para converter dados para/de Python flutua?
Solução
Você pode fazê-lo a cerca de como você gostaria de fazer isso em C -- por exemplo, eu acho que, aproximadamente como este...:
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
Outras dicas
O blog do cara dáuma implementação em ambos e python.Ele usa o módulo struct
, então decodifica manualmente.Não é tudo o que complicou uma conversão.
Uma rápida pesquisa no Google virou http://packages.python.org/bigfloat/ O que diz que tem um contexto para manipulação de números de ponto flutuante binary16
.Eu não estou familiarizado com o pacote, porém, então eu não poderia dizer nada sobre como usá-lo (pelo menos, nada mais do que você pode se ler na documentação).