-1

次の質問が出てくる可能性が非常に高いです。誰かが私を助けてくれたら本当にありがたいです。ありがとうございました。

C# を使用して、次の収束級数を 10^-10 の精度で計算する手順を記述します。

x^(2n-1) / (2n-1)!

私は試した:

class Program 
{ 
    static void Main(string[] args) 
    {
        double x, y, numerator, denominator, answer,  e = Math.Pow(10,-10);
        x = int.Parse(Console.ReadLine());
        int n = 0;

        do
        {
            numerator = Math.Pow(x, (2 * n - 1));
            denominator = (2 * n - 1);
            answer = (numerator / denominator);
            n++;
        }
        while (answer < e);
   }
}

私が思う最大の問題は、階乗関数を呼び出そうとしていることです。

4

4 に答える 4

2

とに注意しx^(2n+1) = x^(2n-1) * x^2てください(2n+1)! = (2n-1)! * 2n * (2n + 1)。この式を使用すると、前の分子と分母からのループの各反復で、分子と分母をそれぞれ簡単に再計算できます。残りは読者に任されています。

于 2012-04-24T17:43:07.460 に答える
0

彼らが「10 ^ -10の精度で」と言うとき、それはパスごとに答えそれよりも少ないことを意味すると思います。あなたのループは良さそうに見えますが、パスからパスへの変更ではなく、答え自体をチェックしています。この変更を試してください:

double lastAnswer = 0.0, delta;   // couple more vars

do
{
    // ... keep current code in loop, add these two lines below

    delta = abs(answer - lastAnswer);   // the change between passes is what's important
    lastAnswer = answer;                // and save last answer for next delta
}
while (delta < e);    // change condition to check difference

n に対して「サニティ チェック」テストを行うこともできます。

while ((delta < e) && (n < 10000000));

n答えが十分に近くない場合は、いつでも制限を増やすことができます。

于 2012-04-24T17:49:01.170 に答える
0

階乗を行う方法だけが問題である場合は、次の記事が役立ちます。

http://guyellisrocks.com/algorithms/factorial-function-in-c/

彼は、これらの値を毎回再計算する必要がないことについて、良い点を指摘しています。

于 2012-04-24T17:49:08.440 に答える
0

これがあなたが望むものだと思います:

class Program
{
    static void Main(string[] args)
    {
        const double tol=1e-10;
        double x = 1;
        if(args.Length>0)
        {
            double.TryParse(args[0], out x);
        }
        int n=1;
        const int n_max=100;
        double y=x;

        while(n<n_max && y>tol)
        {
            y=y*x*x/(2*n*(2*n+1));
            n++;
        }

        Debug.WriteLine(string.Format( "x={0:R}, y={1:R}, n={2}", x, y, n));
    }
}

なんで?まあ、これはあなたが自分で理解できる部分です。

于 2012-04-24T18:01:56.203 に答える