こんにちは、下記のアルゴリズムはなんの意味表しましか?教えてください。。
#define PIK 0.003067962 //3.1415926/1024
//sinとcosのテーブルを用意する(0〜πラジアン)
double sn[1024],cs[1024];
for(i=0;i<1024;i++){
sn[i]=sin(PIK*i);
cs[i]=cos(PIK*i);
}
有難う。。
コメントにあるとおりですが……。
「何が」わからないのですか?
double sn[1024],cs[1024];
[1024]の数字は1MBですね又は1024ビット..なんでPIは1024に割るんですか?sn[i]は0から1024ビットの角度を表しますか?cs[i]もsn[i]と同じですね。。0ビットから1024ビットの角度を表します。何のためにこんなアルゴリズムがありますか??
よるしく。。。
アグス
> double sn[1024],cs[1024];
> [1024]の数字は1MBですね又は1024ビット..
「[1024]の数字」とは何ですか?
> なんでPIは1024に割るんですか?
区間[0, π) [rad]において等間隔で1024個の値を得るためでしょう。
> sn[i]は0から1024ビットの角度を表しますか?
> 0ビットから1024ビットの角度を表します。
「0ビット」「1024ビット」の角度とは?
sn[i]は,sin (iπ/1024)を保持します。
> 何のためにこんなアルゴリズムがありますか??
おそらく,正弦および余弦の値を先に計算してキャッシュするためでしょう。
尤も,上記が正しいかどうかは書いた人に訊かないとわかりませんが。
そうですね。。。このアルゴリズムは正弦および余弦の値を先に計算してキャッシュするためですね。。でも、なぜか区間(0, π)において、等間隔で1024個の値を得るのが、まだ分からない理由なのですね。。
ここでのキャッシュする機能を説明してくれませんか?メモリ領域の確保の関係ですか??
アグス
>ここでのキャッシュする機能を説明してくれませんか?メモリ領域の確保の関係ですか??
それぞれの配列は、double 型の要素を 1024 個メモリ上に確保して、
そこにラジアンを記憶しています。
ホームページアドレスとして存在しないアドレスを書かないでください。
> でも、なぜか区間(0, π)において、等間隔で1024個の値を得るのが、まだ分からない理由なのですね。。
区間(0, π)ではありません。区間[0, π)です。
ref) http://ja.wikipedia.org/wiki/%E5%8C%BA%E9%96%93_%28%E6%95%B0%E5%AD%A6%29
1024という値の意味合いは,コードを書いた人に訊いてください。
これは,256だろうが100だろうが本質的には違わない値です。
> ここでのキャッシュする機能を説明してくれませんか?
単に先に正弦・余弦の値を計算しているだけです。
おそらく,正弦や余弦の計算には時間がかかるので,
剰余計算だけで得られるようにしているのだと思いますが。
有難うYuOさんとまきじさん。
ツイート | ![]() |