5


1

Pythonのbinary16

http://docs.python.org/library/struct.html [struct]モジュールは、データをバイナリ形式に変換したり、バイナリ形式から変換したりするときに便利です。 しかし、最近、http://en.wikipedia.org/wiki/Half_precision_floating-point_format [the binary16 floating point format]を使用するファイル形式の仕様に出会いました。 Pythonのドキュメントを調べましたが、Pythonのドキュメントとの間で変換できるものは見つかりません。 このデータをPythonフロートとの間で変換する最良の方法は何でしょうか?

3 Answer


4


あなたはCでそれをやるのとほぼ同じように行うことができます-つまり、私は大体このように思う…​:

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


2


http://fpmurphy.blogspot.com/2008/12/half-precision-floating-point-format_14.html [この男のブログ投稿]は、PythonとPythonの両方での実装を提供します。 彼は `struct`モジュールを使用し、それを手動でデコードします。 変換はそれほど複雑ではありません。


1


Googleの簡単な検索で、http://packages.python.org/bigfloat/が見つかりました。これは、「binary16」浮動小数点数を操作するためのコンテキストを持っていると言います。 しかし、私自身はパッケージに慣れていないため、使用方法については何も言えませんでした(少なくとも、ドキュメントで自分自身を読むことができる以上のものはありません)。