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?

Foi útil?

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).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top