私はJavaで正弦関数を近似するために書いた方法で少し腹立たしいです。ここは、テイラーのシリーズに基づいています。少し値についてJavaの正弦近似エラー
static double PI = 3.14159265358979323846;
static double eps = 0.0000000000000000001;
static void sin(double x) {
x = x % (2 * PI);
double term = 1.0;
double res = 0.0;
for (int i = 1; term > eps; i++) {
term = term * (x/i);
if (i % 4 == 1) res += term;
if (i % 4 == 3) res -= term;
}
System.out.println(sum);
}
、私はサインの非常に良い近似を得たが、大きな値(例えばPOW(10,22))のために、結果は非常に非常に間違っているようです。ここで
結果は以下のとおりです。
sin(pow(10,22)) // 0.8740280612007599
Math.sin(pow(10,22)) // -0.8522008497671888
誰かがアイデアを持っていますか?ありがとうございました !
敬具、
私はx = x%(2 * PI);と考えました。このような精度の低下は避けられます(パラメータの近似値であっても)。これを減らす方法はありますか? –
最初の 'x'はすでにあまりにも近似しています。定期的な関数で大きな浮動小数点引数を使用することはできません。それは私が恐れる人生です。良い質問。私は誰もそれをupvotedしていない驚いている。 – Bathsheba
ありがとうございました!別の方法を見てみましょう(友人と私は学校に新しい言語を書いています。私たちはMathクラスを実装する必要があります)。もし有用な参考文献があれば;) –