इस प्रश्न के संबंध में C# में पाई

मैंने नीचे दिए गए कोड को कोडित किया और अंतिम 6 अंकों के साथ 0 के रूप में आउटपुट देता है। इसलिए मैं सब कुछ दशमलव में परिवर्तित करके प्रोग्राम में सुधार करना चाहता हूं। मैंने पहले कभी भी डबल के बजाय सी # में दशमलव का उपयोग नहीं किया है और मैं अपने नियमित उपयोग में केवल डबल के साथ सहज हूं।

तो कृपया मुझे दशमलव रूपांतरण में मदद करें, मैंने शुरुआत में सभी डबल को दशमलव में बदलने की कोशिश की और यह अच्छा नहीं हुआ :(।

 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 .NET गणित वर्ग स्थिरांक से PI प्राप्त करें 3.14159265358979000000

3
Karthik Ratnam 5 मई 2011, 22:50
एक बहुत ही समान प्रश्न के लिए एरिक लिपर्ट का उत्तर देखें: .com/questions/4107047/c-high-double-precision/…
 – 
Justin
5 मई 2011, 22:54
@ जस्टिन, मैं एरिक के एल्गोरिदम को बदलना नहीं चाहता हूं। मैं इससे सहज हूं।
 – 
Karthik Ratnam
5 मई 2011, 23:20

1 उत्तर

सबसे बढ़िया उत्तर

खैर, 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 है।

5
Jon Skeet 5 मई 2011, 22:52
क्या आप कृपया जॉन स्कीट के समाधान के एल्गोरिदम की व्याख्या करेंगे।
 – 
user2922935
22 फरवरी 2016, 05:57
@ user2922935: यह मूल कोड के समान ही एल्गोरिदम है। मैंने केवल decimal के उपयोग को सुसंगत बना दिया है।
 – 
Jon Skeet
22 फरवरी 2016, 09:44