HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2017
0419
DoubleQuoteテイラー展開にて正弦関数を算出したい2解決


DoubleQuote

リンク

2017/4/19(Wed) 08:16:41|NO.79142

ふと、テイラー展開にて正弦関数を作ってみたいと思い、ソースコードを考えてみました。


#include "hspmath.as" #module #defcfunc kaijou int _p1 p1 = _p1 ans = p1 for p1,p1-1,1,-1 ans *= p1 next return ans #global angle = 5,45,90,135,180 screen 0,300*length(angle),,,000,000 repeat length(angle) sita_deg = angle.cnt count = 10 sita = 1.0 * sita_deg * M_PI / 180 _sin = 0.0 msg = "sin"+sita_deg+"°をテイラー展開にて算出\n" msg += "正解:sin"+sita_deg+"°="+sin(sita)+"\n" msg += "-----------------------------------\n" repeat count _sin += pow(-1.0,cnt) * pow(sita,2.0*cnt+1) / kaijou(2*cnt+1) msg += "" + cnt + " : " + _sin + "(誤差:"+(_sin-sin(sita))+")\n" loop pos 300*cnt,000 mes msg loop stop

角度が小さいとそこまで誤差が大きくないのですが、角度が大きくなると誤差が大きくなり
収束しません。なにか間違っている箇所があるのでしょうか?
それとも、テイラー展開って、鋭角のみしか使えないのでしょうか?

ご教授願います、よろしくお願いいたします。


テイラー展開の式は、
https://wikimedia.org/api/rest_v1/media/math/render/svg/85ab4b6d72c38ae78bcf9d65741747604121f172
これを参考にしました。



この記事に返信する


沢渡

リンク

2017/4/19(Wed) 11:12:40|NO.79143

関数kaijouの中で、ansの中身がべらぼうに大きい数値になってしまい、整数変数が扱える範囲を
超えてしまっているせいのようです。
以下を実行してみればわかると思います。

#module #defcfunc kaijou int _p1 p1 = _p1 ans = p1 for p1,p1-1,1,-1 ans *= p1 next return ans #global repeat 10 mes kaijou(2*cnt+1) loop
整数ではなく実数にして、扱える桁数を大きくしてやれば上手くいきました。
kaijouの中身を次のように書き換えてください。

#module #defcfunc kaijou int _p1 p1 = _p1 ans = double(p1) for p1,p1-1,1,-1 ans *= double(p1) next return ans #global



DoubleQuote

リンク

2017/4/19(Wed) 11:31:37|NO.79144

沢渡 さま

早急に返信して頂きありがとうございます。
該当箇所、修正したところ、こちらでも問題無く収束できました。

ありがとうございました。



ONION software Copyright 1997-2023(c) All rights reserved.