Mehr Nachkommastellen bei double



  • Hi!

    Ich habe mir gerade folgendes kleines C++-Programm geschrieben, dass sich die Methode der Zerlegung eines Viertelkreis mit r=1 in Streifen zur Hilfe nimmt, um π immer genauer zu berechnen:

    #include <iostream>
    #include <cmath>
    
    using namespace std;
    
    int main()
    {
    	double i, d, temp;
    
    	cout << "Streifen:\t\t\t Pi:\n\n";
    	for(i = 1; i <= 33554432; i*=2)
    	{
    		temp = 1 / i;
    
    		for(d = 1; d < i; d++)
    		{
    		  temp += 1 / i * sqrt(1-pow(d/i, 2));
    		}
    
    		cout << i << "\t\t\t";
    		cout << 4 * temp << "\n\n";
    	    temp = 0; 
    	}
    
    	return 0;
    
    }
    

    Die Ausgabe schaut nun so aus:

    Streifen: Pi:

    [gekürzt]
    
    131072                  3.14161
    
    262144                  3.1416
    
    524288                  3.1416
    
    1.04858e+006                    3.14159
    
    2.09715e+006                    3.14159
    
    4.1943e+006                     3.14159
    
    8.38861e+006                    3.14159
    

    Wie kann ich nun erreichen, dass ich noch mehr Nachkommastellen habe als immer 3.14159 und zudem auf der linken Seite das e006, also das * 106 wegfällt?

    Darüber hinaus würde mich es interessieren, ob es in C++ genauso eine Funktion wie in PHP mit microtime() gibt, die mir die Sekunden seit 1970 zurückliefert.

    Hintergrund ist der, dass ich zweimal Zeit nehmen möchte (einmal vor, einmal nach der Schleife), um die Dauer der Berechnung herauszubekommen.

    Grüße,

    Fabian



  • Jo, in <ctime> gibt es die Funktion time, die tut afaik genau das. Genauer als double wirst Du wohl mit diesem Verfahren nur mit einer Langzahl-Bibliothek, die beliebige Präzision bietet. Zum Beispiel GMP.
    Wenn es Dir darum geht Pi zu berechnen, dann kannst Du auch mal schaun. Es gibt andere Algorithmen, die möglicherweise auf beliebige Genauigkeit verzichten können. Zum Beispiel auch sogenannte Tröpfel-Algorithmen mit denen Du eine bestimmte Nachkommastelle berechnen kannst und so natürlich auch hohe Genauigkeit erlangst.

    MfG Jester



  • Hallo Jester!

    Danke füt deine Nachricht!

    Aber es muss doch auch eine Möglichkeit geben mit nativen C++-Funktionen eine höhere Stellenzahl nach dem Komma zu erreichen, oder?

    Grüße,

    Fabian Steiner



  • Nein.



  • Was? Doch klar, mehr als 6 sind auf jeden Fall drin.

    cout.precision(20);
    

    ... mal damit experimentieren.



  • mit long double hast du 19 Nachkommastellen.


Anmelden zum Antworten