正弦の計算とは? わかりやすく解説

正弦の計算

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/03/01 16:16 UTC 版)

ルックアップテーブル」の記事における「正弦の計算」の解説

四則演算か行ないようコンピュータ多くでは、与えられた値の正弦直接求めることはできないため、高い精度正弦求める際には、代わりにCORDICアルゴリズム使用するか、または以下のようなテイラー展開を行う。 sin ⁡ ( x ) ≈ x − x 3 6 + x 5 120x 7 5040 {\displaystyle \operatorname {sin} (x)\approx x-{\frac {x^{3}}{6}}+{\frac {x^{5}}{120}}-{\frac {x^{7}}{5040}}} (xが0に近い場合) しかし、この処理は(特に低速コンピュータでは)計算時間がかかるまた、コンピュータグラフィックス作成用のソフトウェアなどでは正弦値を求める処理が毎秒何千回も行われる一般的な解決方法としては、予めある範囲の値の正弦一定間隔計算しておき、xの正弦求める際はxに最も近い値の正弦使用するという方法がある。正弦連続関数であり、また値も一定範囲に収まるため、このような方法でもある程度正確な結果に近い値が得られる。処理は例えば以下のようになるreal array sine_table[-1000..1000] for x from -1000 to 1000 sine_table[x] := sine(pi * x / 1000) function lookup_sine(x) return sine_table[round(1000 * x / pi)] ただし、このテーブルは相当の大きさになる。IEEE倍精度浮動小数点数使用する場合なら、テーブルサイズ16,000バイト以上にもなる。サンプル数を減らす方法もあるが、これは代わりに精度著しく悪化する。この問題一つ解決方法としては線形補間がある。これは、テーブル中でxと隣り合っている2つの値の間に直線を引き、この直線上の値を求めるという方法である。これは計算速く滑らかな関数においてもかなり正確な値を求められる線形補間利用した例は以下のようになるfunction lookup_sine(x) x1 := floor(x*1000/pi) y1 := sine_table[x1] y2 := sine_table[x1+1] return y1 + (y2-y1)*(x*1000/pi-x1) その他には、正弦余弦の関係、および対称性利用して、少しの計算時間引き換えテーブルサイズを1/4にする方法がある。この場合ルックアップテーブル作成する際に、第一象限だけを対象とする(つまり、 0 ≦ x ≦ π 2 {\displaystyle 0\leqq x\leqq {\frac {\pi }{2}}} の範囲のみ正弦の計算を行う)。値を求める際は、変数第一象限当てはめなおす。角度を 0 ≦ x ≦ 2 π {\displaystyle 0\leqq x\leqq 2\pi } の範囲直した後(元々 0 ≦ x ≦ 2 π {\displaystyle 0\leqq x\leqq 2\pi } の範囲しか考慮しないであればこれは不要)、正しい値に変換して返す。つまり、第一象限ならテーブルの値をそのまま返し第二象限なら π 2 − x {\displaystyle {\frac {\pi }{2}}-x} の値を返し第三象限第四象限場合それぞれ第一象限第二象限の値をマイナスにして返す余弦求め場合は、 π 2 {\displaystyle {\frac {\pi }{2}}} だけずらした値(つまり x + π 2 {\displaystyle x+{\frac {\pi }{2}}} で求めた値)を返せばよい。正接求め場合は、余弦正弦割ればよい(実装によってはゼロ除算処置必要になる)。 function init_sine() for x from 0 to (360/4)+1 sine_table[x] := sine(2*pi * x / 360) function lookup_sine(x) x = wrap x from 0 to 360 y := mod (x, 90) if (x < 90) return sine_table[ y] if (x < 180) return sine_table[90-y] if (x < 270) return -sine_table[ y] return -sine_table[90-y] function lookup_cosine(x) return lookup_sine(x + 90) function lookup_tan(x) return (lookup_sine(x) / lookup_cosine(x)) 内挿を行う場合不均一サンプリング利用することでルックアップテーブルサイズ削減できる。これは、関数の値直線状にしか変化しない部分ではサンプリング点を減らしそうでない部分ではサンプリング点を増やして近似値実際関数カーブ近づけるという方法である。詳細について内挿参照すること。

※この「正弦の計算」の解説は、「ルックアップテーブル」の解説の一部です。
「正弦の計算」を含む「ルックアップテーブル」の記事については、「ルックアップテーブル」の概要を参照ください。

ウィキペディア小見出し辞書の「正弦の計算」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「正弦の計算」の関連用語

正弦の計算のお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



正弦の計算のページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、Wikipediaのルックアップテーブル (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2025 GRAS Group, Inc.RSS