mieki256's diary



2008/03/07(金) [n年前の日記]

#1 [iappli] CORDICとやらで求めたatan2の結果を検証

C言語で書かれたCORDIC ―― 「double を使って求める版」「int のみで求める版」のソースに遭遇できたので、それらをJavaで書き直して実験したり。

得られた結果は Javaに標準で入ってる atan2() とさほど変わらないように見える。もっとも、ラジアンと角度の変換をしてる時点でもはや精度もへったくれもないやろという気もするのだけど。まあ、ゲームアプリに使える程度の精度があれば充分というか。

色々な方法で atan2() を動かしてみたのだけど、速度的には予想通り、テーブルをいきなり参照してしまう版が一番速い模様。テーブル参照版の処理時間を1とすると、CORDICで取得する版は、2.7倍。sin関数とcos関数を使って2分探索していく版は、27倍の時間がかかる。ただ、テーブル参照版は、テーブルのサイズも一番食うわけで…。

つまり、速度を優先するなら、
  1. テーブル参照版。
  2. CORDIC版。
  3. 2分探索版。
の順で選ぶべきだけど、メモリ使用量を優先して考えるなら、
  1. 2分探索版。
  2. CORDIC版。
  3. テーブル参照版。
の順で選ぶべき、ということになるだろうか。…ただ、2分探索版は、sin()及びcos()をsinテーブルを利用して高速に処理してることが前提なわけで。sinテーブルのサイズまで考慮して、メモリ使用量が一番少ないものを選ぶとなると、
  1. CORDIC版。
  2. 2分探索版。
  3. テーブル参照版。
という並びになるのかもしれない。CORDICはsin()・cos()すら最低限のテーブルサイズで取得できるから。

というか今時の言語・ライブラリは、atan2() を標準で持ってるものがほとんどだし、そっちのほうがえてして処理も速いわけで。自分でわざわざ用意する必要なんてないんだけど。どうして自分がこのへん調べてるかというと、昔の携帯上でatan2()を使おうとすると自分で用意するしかないから、なのであります。

携帯アプリのライブラリも、最近のライブラリなら3D関係をやる都合上、atan2() が入ってるし。機種を特定できれば、昔の機種でもオプションライブラリに atan2() があったりするんで。あくまで、昔の機種、かつ、色んな機種でも動かせるようなアプリを作るなら、という話でございますれば。

参考ページ。 :

CORDICって流行らないのかな。 :

日本語で書かれた解説ページがほとんど見当たらないのだけど。しかし「どうやらCORDICという方法があるらしいぞ」という文言はちょくちょく見かける。なんだか都市伝説の域に入っちゃってるんじゃないのかという感がなきにしもあらず。いや、ハードウェア関係ではかなり使われてるらしいのだけど。

以上、1 日分です。

過去ログ表示

Prev - 2008/03 - Next
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project