人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

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

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

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

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

●質問者: cdaotg
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● a-kuma3
ベストアンサー

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


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

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ