- ベストアンサー
CORDICアルゴリズム
こんにちわ、sohです 三角関数をビットシフト演算と加減算のみで求められるという噂をききつけ CORDICアルゴリズムを調べてたんですが いまいちよくわからないんです(T^T やっぱり複素数平面をちゃんと勉強しなおさないと理解不能?(^^; 誰か簡単に説明していただけないでしょうか? とりあえずマイクロな(浮動小数点無しで非力なCPU&きつきつなメモリ)環境にて θ もしくは radianからsinθ(or radian)の値を有効小数点桁2桁くらいまでで、高速に求められば目的は達成できるのですが・・・・
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
noname#11476
回答No.2
その他の回答 (2)
noname#11476
回答No.3
- imogasi
- ベストアンサー率27% (4737/17070)
回答No.1
お礼
回答ありがとうございます。 あぁ、なーるほど ソースがあるとどういうシーケンスで動くのかわかりますわ(笑 まじでサンクスです。 始めのテーブルは回転角度を入れとくためのテーブルで 目標とする角度の近似になるよう収束させるんですね。 +-のぶれを if ( z > 0.0 ) s = -1.0; else s = 1.0; で修正しつつ収束させると。 テーブル作成部分も一応ビットシフトで高速化ができるかな、ってあれ・・・・? テーブル作成時に arctan使わんといかんのですか。 ん~っと。。。 そうか収束させるための回転角度の計算してるんですよねこのテーブル。 むむむ~~~、atanも持ってないから仕方ない データ数12個くらいのテーブルなら作っても大してメモリ圧迫しないで済むからつくっちゃうしかないのかなぁ? >あとは、上記を見ればわかるとおり、乗算部分はビットシフトで計算できますから ごめんなさい、ここがわからない tmp = x + s * d * y; y = y - s * d * x; を tmp = x + ((s * y) >> d); y = y - ((s * x) >> d); d ++; にできるのはわかったんですけど、他にビットシフトで対応できる個所ってどこなんでしょうか?