kostenloser Webspace werbefrei: lima-city


Problem beim Berechnen von Pi

lima-cityForumProgrammiersprachenC/C++ und D

  1. Autor dieses Themas

    u************r

    Hallo mein Programm sollte eigentlich die Zahl PI berechnen! Es gibt allerdings nur 1.00000 aus! Und ausserdem hat ein Double doch 16 nachkomma Stellen! Also bitte helft mir!

    Hier der Code:
    #include <stdio.h>
    
    int main()
    {
    	FILE * pFile;
    	unsigned long int schleife, i;
    	double pi,pi4;
    	printf("Geben Sie die Genauigkeit ein: ");
    	scanf ("%d", &schleife);
    	i = 3;
    	pi4 = 1;
    	printf("Die Zahl PI wird auf eine Genauigkeit von %ld berechnet!\n\n", schleife);
    	while (i <= schleife)
    	{
    		pi4 -= 1/i;
    		i += 2;
    		pi4 += 1/i;
    		i += 2;
    	}
    	pi = pi4 *4;
    	printf("%lf\n\n", pi);
    	pFile = fopen ("pi","a+");
    	fprintf(pFile, "Diese Zahl PI ist mit der Reihendarstellung nach Leibniz errechnet!\n");
    	fprintf(pFile, "Es wurde bis zur Bruchzahl 1/%d gerechnet!\n", schleife);
    	fprintf(pFile, "Die Zahl PI: %lf\n", pi);
    	fclose(pFile);
    	return 0;
    }

    danke im vorhinein!

    LG GZ

    Beitrag zuletzt geändert: 30.1.2009 13:13:51 von ultimateserver
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. c*****s

    while (i <= schleife)
    	{
    		pi4 -= 1/i;
    		i += 2;
    		pi4 += 1/i;
    		i += 2;
    	}
    i wird nicht automatisch in eine Gleitkommazahl (double) umgewandelt, d. h. rechts vom Gleichheitszeichen wird in ganzen Zahlen gerechnet (Integerarithmetik) mit einem gigantischen Genauigkeitsverlust.

    So ist es richtig:
    while (i <= schleife)
    	{
    		pi4 -= 1/(double) i;
    		i += 2;
    		pi4 += 1/ (double) i;
    		i += 2;
    	}
    Und Doku von printf durchlesen => z. B. printf("%1.12lf\n\n", pi);
  4. kalinawalsjakoff

    Kostenloser Webspace von kalinawalsjakoff

    kalinawalsjakoff hat kostenlosen Webspace.

    Ich bin mir nicht ganz sicher, aber währe es mit Javascript oder PHP, C++ oder anderen Sprachen möglich die Berechnung von Pi mit den Formeln von hier http://de.wikipedia.org/wiki/Kreiszahl#Moderne_N.C3.A4herungsrechnung_und_Bestimmung durchzuführen? Na klar man müßte die sicher für die gewählte Sprache umsetzen.

    Ich will hier jetzt keinen ellenlangen Programmcode. Ist nur eine frage ob es prinzipiell möglich währe.
  5. Autor dieses Themas

    u************r

    Danke für eure Hilfe!

    Ich habe meine Fehler gleich ausgebessert und nochmal probiert.
    Mit Linux geht die Double bis 51 nachkommastellen!

    @ kalinawalsjakoff: ich habs auch schon in Php programmiert



    Danke nochmal


    Lg gz
  6. c****s

    Ein Double oder Float haben garkeine feste Anzahl an Nachkommastellen. Die Zahl besteht lediglich aus einem Signum, einer Mantisse und einem Exponenten.

    Der Float hat 1 bit Signum, 8 bit Exponent und 23 bit Mantisse.
    Der Double hat 1 bit Signum, 11 bit Exponent und 52 bit Mantisse.

    Das heißt man hat beim Float 7 bis 8 gültige Stellen (nicht Dezimalstellen) und beim Double 15 bis 16 gültige Stellen.

    Den Linux-Double mit 51 gültigen Stellen möchte ich gern mal sehen. Muss auf alle Fälle ein Double Extended sein.
    Wo hast Du den? Welcher Prozessor (anscheinend weder i386 noch Alpha) ? Welcher Kernel? Welcher Kompiler?
  7. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!