Berechnung von Pi



  • Hallo zusammen, ich habe die Aufgabe mit einer schlaufe und double pi zu berechnen

    die formel lautet pi=4-4/3+4/5-4/7+4/9...

    soweit so gut, jetzt habe ich ein einfaches programm geschrieben mit all dem was ich so brauchen darf (sehr eingeschränkt, aber es scheint fast zu klappen)

    schaut, hier der sourcecode:

    #include <iostream>
    
    int main () 
    {
      // Input  
      std::cout << "Approximate the constant pi for how many iterations. n = ? ";
      int n;
      std::cin >> n;
    
      // Computation
    
      double pi = 0;
    
      // Iteration 1 to n
    
      for (int i = 1; i<=n; i+=2)          // Because we need expr i+2 we can not write ++i++i or else only i+=2
        {
      if (i%4 == 1 )                          // We have to make out wheter a divisor has to be added or to be subtracted
         pi += 4/i;
      else      pi -= 4/i;    
    
       std::cout << "The current approximation is " << pi << " \n ";
        }
    
      return 0;
    }
    

    Gut, mein problem ist jetzt der output wenn ich kompiliert habe:

    wenn ich zbsp n=1000 eingebe kommt 1000x

    The current approximation is 3

    egal, wie oft, es gibt einfach nicht double aus, bzw, die relevanten zahlen nach dem komma, was ist hier los?

    Lg Axel



  • der fehler liegt hier:
    pi+=4/i;
    bzw.
    pi-=4/i;
    das ist eine ganzzahlige division. du musst mindestens einen von beiden als fließkommazahl darstellen.
    also entweder:
    pi+=4.0/i;
    oder
    pi+=4/(double)i;
    oder ganz korrekt:
    pi+=4.0/(double)i;



  • So einfach kanns sein, merci, es läuft jetzt,

    :p



  • ghorst schrieb:

    pi+=4.0/(double)i;

    Oder mit den C++-Style-Casts:

    pi+=4.0/static_cast<double>(i);
    

    😉



  • ach komm. das ist doch nun wirklich unnötig viel zu schreiben. ich bin faul, daher ist hier ein c-cast besser lesbar, weil er kürzer ist. 😉


  • Mod

    oder Funktionstyle

    4./double(i)
    

    wobei das letztlich so oder so überflüssig und nicht hilfreich ist. Die Verwendung eines Gleitkommaliterals sollte aussagekräftig genug sein.



  • stimmt der geht auch noch und wäre "mehr" c++ gewesen. den nutze ich normalerweiser nur bei klassen. warum auch immer...

    das gleitkommaliteral ist mit sicherheit die eindeutigste variante. da hast du hast.


Anmelden zum Antworten