1

私はC#atmを学び、私の本で説明されている問題の1つを解決しようとしています。シーケンス1+1/2 --1 / 3 + 1/4 --1 / 5 + ....を計算して出力するプログラムを作成します(精度0.001)。これは一般的な問題であることはわかっていますが、ほとんど失われました。それを解決するために一日中、それでも私はそれを一人で行うことはできません(多分私は十分に努力していません)。

static void Main()
{
    double sum = 0D;
    double sum1 = 0d;
    int i = 1;
    while ( i <100)
    {
        i++;
        if (i % 2 == 0)
        {
            sum1 = sum1 +(1 / i);
        }
        else
        {
            sum1 = sum1 -(1 / i);
        }

        sum = sum1 + sum;
        Console.WriteLine(Math.Round(sum, 3));
    }
}
4

3 に答える 3

10

「i」は整数であるため、「/」は整数の除算演算子であり、分数を与えることはないため、除算1 / iは常に0になります(i = 1の場合を除く)。したがって、小数を取得するには、double値1.0/iを除算する必要があります。

さらに、ループ条件i<100は必要なものではありません。そこに設定するか(1.0 / i> 0.001)、変換する(i <1000)方がよいでしょう。あなたが持っているシーケンスについては、それは必要な精度を保証します。

于 2012-07-21T16:21:56.633 に答える
1

0.001の精度で計算しているのではなく、各ステップで四捨五入しています。ループを実行する必要がありますabs(current_sum - previous_sum) >= 0.001current_sum現在の反復とprevious_sum前の反復の合計です。

于 2012-07-21T16:20:04.477 に答える
-2

これが調和級数であることをすでにご存知ですか?

調和級数に関するウィキペディア

計算はとても簡単ですが、精度の部分で何を意味するのかわかりません。

        double harmonic = 0;
        int partialSumsUpTo = 10000;

        for (double i = 1; i <= partialSumsUpTo; ++i)
        {
            double part = 1 / i;
            harmonic += Math.Round(part, 5);
        }

宿題に交互調和級数が必要なので、これはネタバレではないことに注意してください。しかし、あなたは確かにあなた自身でその部分を手に入れるでしょう。

于 2012-07-21T16:46:11.423 に答える