1

うーん、これは自力で出せなくて恥ずかしいのですが..浮動小数点数の仮数(と指数)のビット
数を減らすにはどうすればいいでしょうか?


私は (畳み込み) 人工ニューラル ネットワークをトレーニングしています (そしてそれを FPGA に実装しています)。CPU での仮数 (および指数) ビット幅とテスト (およびトレーニング) 精度の関係を調べたいと思います (およびGPU)。次のステップは、フロートを固定小数点表現 (FPGA で使用しているもの) に変換し、どうなるかを確認することです。

同様の種類の研究が他の研究者によって既に行われているため ([Tong, Rutenbar and Nagle (1998)] および [Leeser and Zhao (2003)])、「方法」はまだわかっていませんが、これを行う方法があるはずです。私には明らかです。

最後のポイント、私は Lua でプログラミングしていますがffi、LuaJIT を使用して C のものを簡単に含めることができます。

4

1 に答える 1

2

2 進浮動小数点数xの仮数部からsビットを削除し、残りのビットを丸めるには、Veltkamp のアルゴリズムを使用します。

Let factor = 2**s + 1.
Let c = factor * x.
Let y = c - (c-x).

上記の各演算は、 xと同じ精度で最も近い値に丸めるなど、浮動小数点演算で計算する必要があります。yは望ましい結果です。

これにより、単一の数値がより短い仮数に丸められることに注意してください。一般に、有効桁数が短い場合の計算結果は再現されません。たとえば、abが与えられた場合、より高い精度でa •<i>b を計算してからより低い精度に丸めると、最終的な精度で a •<i>b を計算するのと常に同じ結果になるとは限りません。

指数範囲を縮小するには、値を新しい指数範囲のしきい値と比較し、アンダーフローまたはオーバーフローを適切に宣言するだけです。

于 2013-10-17T16:03:28.240 に答える