Frage

Mit reg zu dieser Frage Pi in C #

Ich habe den folgenden Code codiert und eine Ausgabe mit den letzten 6 Ziffern als 0 ausgegeben. Daher möchte ich das Programm verbessern, indem ich alles in Dezimalzahlen konvertiere.Ich habe noch nie eine Dezimalstelle in C # anstelle eines Doppels verwendet, und ich fühle mich bei meiner regulären Verwendung nur mit dem Doppelten wohl.

Also bitte helfen Sie mir bei der Dezimalumrechnung. Ich habe versucht, beim Start alle Doppel- und Dezimalzahlen zu ersetzen, und es wurde nicht gut :(.

 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);
    }
    }
}

Ausgabe

Holen Sie sich PI von den hier gezeigten Methoden 3.14159265358979000000 PI aus der .NET Math-Klassenkonstante abrufen 3.14159265358979000000

War es hilfreich?

Lösung

Nun, das Ersetzen von double durch decimal ist ein guter Anfang - und dann müssen Sie nur noch die Konstante von 2,0 auf 2,0 m ändern:

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);
    }
}

Natürlich wird es immer noch eine begrenzte Genauigkeit haben, aber etwas mehr als double.Das Ergebnis ist 3.14159265358979325010.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top