2011-09-15 126 views
3

私はHalf precision floating point representation の数値を扱う必要があるコードを持っています。これを達成するために、このタイプに関連するすべての演算子(算術論理、リレーショナル)をカスタム関数でオーバーロードし、半精度の浮動小数点数を持つSingle precision floating pointの数値を使用して、独自のC++クラスfp16を作成しました。単精度浮動小数点表現から半精度浮動小数点数への変換

半精度浮動小数点= 1つのサインビット、5指数ビット、10仮数ビット= 16ビット

単精度浮動小数点= 1つの符号ビット、8指数ビット、23仮数ビット= 32ビット

だから、私は単精度浮動小数点数からハーフ精度浮動小数点数に変換するために何をするのですか: -

有効ビットの場合 - 32ビットの切り捨て、すなわち13ビットの緩やかなものを使用して、半精度float 。

指数ビットを処理するにはどうすればよいですか。 8指数ビットから5指数ビットにはどうすればいいですか?

良い資料があれば助かります。

+0

指数が5ビットで表現できない場合は、オーバーフロー状態です。 IEEE754のような表現を使用している場合は、結果として 'inf'を与えたいかもしれません。私は 'double'->' float'変換に関するすべての読みは関連していると思います。 – eudoxos

+1

(そして、ああ、半分の精度のリファレンス[c/C++コード(matlab用)](http://www.mathworks.com/matlabcentral/fileexchange/23173)にウィキペディアの記事があります?それは良いインスピレーションかもしれません。) – eudoxos

+0

@ eudoxos - MAtlabリンクに感謝します。それは何ができるかうまく説明します。 – goldenmean

答えて

1

OpenEXRによって開発されたライブラリーの溶液を見出した。基本的に2つのオプションがあります OpenEXRはこのオプションをa)below- を使用しますa)半精度の浮動小数点データ型を格納するには16ビットの符号なしのshort型を使用し、浮動小数点の変換に使用される値のルックアップテーブルストアを事前に計算します半分まで、また半分は浮動する。

私はこの方法で使用しました。 b)単精度浮動小数点数の精度を落として、半精度浮動小数点数を得ることができます。これを "float"ネイティブタイプで保存します。指数部は変更しないでください。浮動小数点数(単精度)を使用して縮小精度の半精度浮動小数点データを格納しているためです。

Matlabリンクのための@eudoxosは、この全体についていくつかの詳細を説明しています。

関連する問題