C++用の半精度(16bit)浮動小数点ライブラリって無いですか?


環境ですが、x64プロセッサ(第3世代Core i7)・Win7 x64・Visual C++ 2008です。

メインメモリ上での一時的な記憶用に欲しいだけなので、floatなりdoubleなりのデータを半精度に変換してメモリに保存、後で読み出して演算する時はfloatかdoubleに再変換してから処理って流れを考えています。

という訳で、最低限必要なのは「float・doubleと半精度間の変換」のみです。

出来れば無償で使用可能で、ソースが公開されていると嬉しいです。

以上、よろしくお願いします。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2013/06/27 00:49:05

ベストアンサー

id:a-kuma3 No.1

回答回数4974ベストアンサー獲得回数2154

OpenEXR の IlmBase に含まれる half クラスを使うのはどうでしょうか。
http://www.openexr.com/downloads.html

軽くソースを見てみましたけど、値の実体は unsigned short で持ってます。
half float → float が表引きで変換してるので、多少メモリは食いますが速そうです。
その分、ビルドにはひと手間必要ですが、VC7、VC8 のプロジェクトファイルもついているようなので。

ライセンスは、修正BSDライセンスのようです。



こんなのもありました。
http://half.sourceforge.net/

多分、値の実体を u_int16 で持ってる。
でも、ざっと見ただけでは、どうしてテンプレートライブラリになってるのかが、よく分からなかった。
クラスを使うだけだったら、テンプレートを意識しないと思います。

ライセンスは MIT ライセンスだそうです。


あと、おまけ。
Dr.Dobb's Journal に、こんなのがあって「おおっ」って思ったんですけど、D 言語だった ><
http://www.drdobbs.com/cpp/implementing-half-floats-in-d/240146674

でも、移植はそれほど難しくないのかもしれない。
https://github.com/WalterBright/phobos/blob/1825238110186a1b9e71bca3fa6591de1e8c6dc7/std/halffloat.d


http://en.wikipedia.org/wiki/Half_precision

id:cdaotg

三つも教えて頂き、ありがとうございます。
最後のやつを(D言語の勉強も兼ねて)C++に移植してみます。
double・floatと半精度の変換だけなら、多分私でも理解できると思います。

2013/06/27 00:50:25

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません