FPGAで作るMath Function
Advanced FPGA Design: Architecture, Implementation, and Optimizationに載っている方法。
整数以外の演算は仕事で使わないので縁がないが、次勉強するときのヒントにはなった。
割り算
(1)Multiply and Shift
2のべき乗で割れるように近似する。
7で割る場合、512/73=7.014を利用して73倍して512で割れば、近い値が得られる。512で割るところは9bitの右シフトなので簡単に計算できる。
乱暴な気がするが、割り算が定数の時有効。
(2)Iterative Division
筆算と同じで、何度も引く。
高速化したBoothのアルゴリズムが知りたい人はパタヘネ読もう。
(3)The Goldschmidt Method
少しずつ計算をしていって近いところを探しに行く。割り算を実行するのではなく、逆数を近似して乗算で近づけていく。順番に計算するのでパイプラインと相性が良い。浮動小数点向けの近似法。
近似のアルゴリズム
(4)TAYLOR AND MACLAURIN SERIES
級数展開して近似する。複雑な式を乗算器と加算器の組み合わせに落とすことができる。
(5)THE CORDIC ALGORITHM
Coordinate rotation digital computer の略。
有名な方法らしいが、一読では理解できなかった。後で勉強する。
この本の弱点は、参考文献が弱いこと。もう少し詳しく知りたくなったときに、章毎に参考文献が欲しい。
The comments to this entry are closed.
Comments
間違えた。Boothのアルゴリズムは乗算ですね。
http://ja.wikipedia.org/wiki/ブースの乗算アルゴリズム
バイナリな演算としては、面白い部類に入るのでおすすめ。
僕もちゃんと勉強しよう。
Posted by: なつたん | 2008.03.23 11:44 PM