2014年4月18日金曜日

C++, floating point number: em++ の浮動小数点数型の分解能

一般的なPC(x86_64)-ubuntu-saucy/clang++-3.2とnodejs-0.10.15/em++-0.14.1で単純な浮動小数点型を扱うとそれぞれに違いが生じる。



直ちに問題になる事に現在は取り組んでいないのだけど、一応気に留めて置いたほうが良さそう(╹◡╹)

浮動小数点数を扱う際は分解能と丸め誤差を意識できないと危ないですね。

それはそうと、em++ではネイティブなECMAScript-5.1th規格では整数は32bit、浮動小数点数はIEEE754-Binary64の取り扱いのみで、C++のfloatはエミュレーションコストが必要なはず。近年は時折一般的なPCにおけるfloatとdoubleの計算ベンチマーク、x87とSSEとx86_64のレジスター利用効率の比較など話題になりますが、たぶんem++ではfloatはdoubleよりも遅くなるのでしょうね・w・

…ただ、EmscriptenではJavaScript処理系でのSIMD命令の実装プロジェクトなども進めているので、32bit整数型を利用したソフトウェアSIMDで16bit-floatのパック演算とかしたらどうなるのかお楽しみではあるけれど。

※alias clang++11.debug='clang++ -std=c++11 -O0 -g'
※alias em++11.debug='em++ -std=c++11 -O0 -g'

0 件のコメント:

コメントを投稿