Pi ausrechnen?



  • Hi,

    ich möchte gerne PI ausrechen und hab hier im Forum neulich diese Funktion gefunden:

    float PI(__int64 n) 
    {
        float erg = 0; 
        __int64 i = 1; 
        while (i < n) 
        { 
            erg += 1/i; 
            i += 2; 
            erg -= 1/i; 
            i += 2; 
        } 
        return i; 
    }
    

    Leider kommt da kein PI raus?:( Was stimmt an der Funktion nicht?



  • Da fehlt ein Punkt hinter der 1 bei 1/i, also 1./i oder 1.0/i. Lass mich raten: Es kam 1 raus?



  • nein leider was total falsches (53)

    #include <iostream>
    
    using namespace std;
    
    float PI(__int64 n)  
    { 
        float erg = 0;  
        float i = (float)1.0f;  
        while (i < n)  
        {  
            erg += 1.0f/i;  
            i += 2.0f;   
            erg -= 1.0f/i;  
            i += 2.0f;  
        }  
        return i;  
    }
    
    int main (void)
    {
    	cout << PI (50) << endl;
    
    	return 0;
    }
    


  • Du kannst auch "4*atan(1)" nehmen...



  • ja ich finde das sieht so aus als wäre i nur ne Zählvariable und erg wohl das ergEbnis,d.h. ich bin mir da verdammt sicher, schreib doch return erg; statt return i;



  • Winn schrieb:

    Du kannst auch "4*atan(1)" nehmen...

    Dann tut's acos(-1) auch.



  • In meinem Analysis-Buch steht folgendes Verfahren, welches sehr gut für die Berechnung von pi geeignet sein soll, da es schneller als quadratisch konvergiert. Also, man setzt a0=1a_0 = 1 und b0=0.5b_0 = \sqrt{0.5} und für \nu = 1,\dots,n:

    $ \begin{eqnarray*} a_\nu &=& (a_{\nu - 1} + b_{\nu - 1}) / 2\\ b_\nu &=& \sqrt{a_{\nu - 1} b_{\nu - 1}}\\ \pi\_n &=& (a\_n + b\_n)^2 / (1 - \sum\_{\nu = 0}^n 2^\nu\cdot(a_\nu - b_\nu)^2) \end{eqnarray*}

    Bereits pi_3 hat 20 korrekte Dezimalstellen.


Anmelden zum Antworten