2016-11-25 9 views
2

x == 0x == 90またはx == pi/2で正解で、そうでなければ5%以内の正弦の近似を探しています。シンプル近似サイン

私はルックアップテーブルのためのスペースがありません。

+4

標準のsin関数には何が問題なのですか? –

+1

Taylorシリーズを使用して近似を実装することができます –

+1

私たちはコーディングサービスはありません。 – Olaf

答えて

11

あなたはBhaskara I's sine approximation formulaを使用することができるように見える:

float x; 
float sinx = 4 * x * (180 - x)/(40500 - x * (180 - x)); 

誤差は2%以内にとどまります。

非常に高速で、(手作業で)最適化することができます。

+3

それ以外の場合は5%以内*と言います。 – Kh40tiK

+0

@ Kh40tiK私は誤って読んでしまいました(目的:-)これは良い答えです。 –

1

私がこれを行うと考えることができる唯一の方法は、Taylor/Maclaurin Expansionsを使用することです。

これらは、関数に対する改良近似を表す多項式を形成します。

一般に、テイラー級数で近似したい関数の値を選択します。

たとえば、約x = 0ラジアンsin(x) = x - x^3/3! + x^5/5!です。このシリーズは無限であり、あなたが得る真の価値に近づけるほどの言葉を含んでいます。

「便利な」場所(30,60,45,90度)でこれらのテイラー展開のいくつかを形成する必要があるかもしれないことをお勧めします。そして、角度が最も近い関数を使用します。

+0

"次に、角度が最も近い関数を使用してください。 - ルックアップテーブルのように? ;-) –

+0

このように何も保存する必要はありません。ちょうど4つの関数を定義し、どの関数を呼び出すかを決める 'if'を持っています。 – James

3

sinの派生語は、cosで、1を上回ることはなく、5%は1/20であるため、20 * pi/2 = 32ポイントのルックアップテーブルが要件を満たします。あなたはそれを保存するために32バイトのRAMもスペアすることはできませんか?

+0

私は合計64または1KBのRAMを持っています。 – fadedbee

+0

それはどれだけ無料ですか? –

+0

@意味 - あなたの答えはクールですが、あなたのコメントは* my * answerに関するディスカッションには貢献せず、自己宣伝の目的のみに役立ちます。 –

0

速い線形フィットで見つかりました。

1.00003 x - 0.000312267 x^2 - 0.165537 x^3 - 0.00203937 x^4 + 0.010286 x^5 - 0.000961693 x^6 

この最大誤差は3%です。

+0

ありがとう、しかしこれはBhaskara Iの正弦近似と競合しますか? 12倍の乗算が必要なようですが、Bhaskara'sには除算が必要です。 – fadedbee

+0

@chrisdew私はそれについてgoogledしなかったので、まったくそうではありません:) – Kh40tiK

+0

@chrisdewまた、 'a + x *(b + x *(c + x *(...) ) ' – Kh40tiK