2008年11月10日月曜日

数値計算

以前,コンピュータの数値計算はマクローリン展開を使うと書いたが.>数表
$\sin x = x-\frac{x^3}{3!}+\frac{x^5}{5!}-\frac{x^7}{7!}+\frac{x^9}{9!}-\cdots$
マクローリン展開では,累乗,掛け算,割り算という比較的時間のかかる計算を行うのがネックで,コンピュータの数値計算には使われていない.

実際は,CORDICという方法が使われている.
これは「シフト、加減算、テーブル参照(定数読み出し)による演算を繰り返し行う」ことで高速で精度のよい数値計算を行っている.>PDF

加減算は高速だが,乗除は時間がかかる.CORDICでは乗除算は使わず,どうしても必要な乗除算は高速なシフトを使う.シフトとは桁ずらし.1,0で表現された2進数を一桁ずらすことで,2倍と1/2倍を計算する.浮動小数点なら,指数部に1を足したり引いたりで2での乗除ができる.

テーブル参照とは,あらかじめ作っておいた数表を参照すること.それなら全部の数表をはじめから用意すれば高速だが,逆にメモリを馬鹿食いして遅くなる.その辺はバランスである.
つまり,基準になるいくつかのポイントを数表で用意し,そこから高速な計算で精度よい近似値を得るのがCORDICである.
それが,かつての数値演算コプロセッサや今のCPUに実装されていて,エクセルではそれを呼び出して計算しているのだろう.

理屈はこちらのサイトがわかりやすい.>CORDIC による三角関数の計算

0 件のコメント:

コメントを投稿

スパム対策のため,コメントは,承認するまで表示されません。
「コメントの記入者:」は「匿名」ではなく,「名前/URL」を選んで,なにかニックネームを入れてください.URL は空欄で構いません.