Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

自作Sinメソッドさん、まだ壊れている箇所があった #372

Open
iwkjosec opened this issue Nov 22, 2021 · 1 comment
Open

Comments

@iwkjosec
Copy link

iwkjosec commented Nov 22, 2021

[構造化] 関数 > 関数定義

double Sin(double x)が二つありますが微妙にバグっていて、ループの添え字を2から始めるのが正しいです。
出力例に変化はありません。(以前のと同じで何故かバグっていない場合の正しい値になっている)

また、

// かなり適当に作ってるので、この方法ではそんなに精度はよくない。

/// 実装は割りと適当。

というコメントがありますが、これはバグのせいであって直すと (-2π, 2π) の範囲で14桁以上の精度が出るので消してしまっていいと思います。
(Math.Sinより少し劣るぐらい。(-2π, 2π)の範囲ではiが最大でも60程度でx / factがアンダーフローするから実装上の限界まで精度が出ている)

ちなみにコメントでいうと[構造化] 名前空間 > using エイリアスのサンプルの、

        /// この実装は甘い。
        /// 入力できる値は-0.1~0.1程度で、精度も4桁程度。

もバグっていた時の名残なので消してしまって大丈夫です。

関連:#234 #241

@iwkjosec
Copy link
Author

iwkjosec commented Dec 6, 2021

このリポジトリのこれもですかね

/// <summary>
/// sin x を求める関数。
/// テイラー展開を利用。
/// かなり適当に作ってるので、この方法ではそんなに精度はよくない。
/// とはいえ、10桁程度なら C# 標準の Sin 関数と値が一致するはず。
/// </summary>
static double Sin(double x)
{
double xx = -x * x;
double fact = 1;
double sin = x;
for (int i = 1; i < 100;)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant