3

この質問 に関連してC#のPi

以下のコードをコーディングし、最後の6桁を0として出力します。したがって、すべてを10進数に変換してプログラムを改善したいと思います。私はこれまでC#でdoubleの代わりにdecimalを使用したことがなく、通常の使用ではdoubleに慣れています。

だから、10進数の変換を手伝ってください、私は最初にすべての2進数を10進数に置き換えようとしましたが、うまくいきませんでした:(。

 using System;

class Program
{
    static void Main()
    {
    Console.WriteLine(" Get PI from methods shown here");
    double d = PI();
    Console.WriteLine("{0:N20}",
        d);

    Console.WriteLine(" Get PI from the .NET Math class constant");
    double d2 = Math.PI;
    Console.WriteLine("{0:N20}",
        d2);
    }

    static double PI()
    {
    // Returns PI
    return 2 * F(1);
    }

    static double F(int i)
    {
    // Receives the call number
   //To avoid so error
    if (i > 60)
    {
        // Stop after 60 calls
        return i;
    }
    else
    {
        // Return the running total with the new fraction added
        return 1 + (i / (1 + (2.0 * i))) * F(i + 1);
    }
    }
}

出力

ここに示されているメソッドからPIを取得します3.14159265358979000000.NETMathクラス定数からPIを取得します3.14159265358979000000

4

1 に答える 1

5

さて、に置き換えるdoubleことdecimalは良いスタートです-そしてあなたがする必要があるのは定数を2.0から2.0mに変更することだけです:

static decimal F(int i)
{
    // Receives the call number
    // To avoid so error
    if (i > 60)
    {
        // Stop after 60 calls
        return i;
    }
    else
    {
        // Return the running total with the new fraction added
        return 1 + (i / (1 + (2.0m * i))) * F(i + 1);
    }
}

もちろん、精度は制限されますが、。よりわずかに高くなりdoubleます。結果は3.14159265358979325010です。

于 2011-05-05T18:52:43.273 に答える