Anfänger mit Riesen Problem - Verstehs net



  • Hey, schreib bald ein Testat in C und hab ne Frage.

    Programm:

    #include <stdio.h>
    
    void main(void)
    {
    	long n=3, max;
    	double pi = 1.0;
    
    	printf("\tBerechnung von PI mit Leibniz-Methode\n");
    	printf("Ganzzahligen Parameter n>>3 eingeben: ");
    	scanf("%li", &max);
    
    	while(n<max)
    	{
    		[b]pi = pi -1./n + 1./(n+2);[/b]
    		n = n + 4;
    		printf("n = %li: %f\n", n, pi * 4.0);
    	}
    }
    

    warum muss ich pi = pi -1./n + 1./(n+2) schreiben
    und nicht einfach pi = pi -1/n + 1/(n+2) ????

    Wäre für ne Antwort sehr dankbar

    Edit by c.rackwitz: [code] ist lesbarer 🙂



  • Dieser Thread wurde von Moderator/in estartu_de aus dem Forum MFC (Visual C++) in das Forum ANSI C verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • TobiS. schrieb:

    warum muss ich pi = pi -1./n + 1./(n+2) schreiben
    und nicht einfach pi = pi -1/n + 1/(n+2) ????

    Weil der Compiler bei der zweiten Variante Ganzzahl-Arithmetik anwenden würde - und die schneidet alle NAchkommastellen ab (1 ist eine ganze Zahl, n ist eine ganze Zahl -> wir dividieren ganzzahlig), mit der Angabe "pi = pi - 1./n ..." erklärst du deinem Compiler, daß du hier mit Gleitkomma-Zahlen rechnen willst.



  • TobiS. schrieb:

    Hey, schreib bald ein Testat in C und hab ne Frage.

    warum muss ich pi = pi -1./n + 1./(n+2) schreiben
    und nicht einfach pi = pi -1/n + 1/(n+2) ????

    Wäre für ne Antwort sehr dankbar

    Es hat etwas mit der Problemetik der Ganzen und Flieskommazahlen zu tun.

    res = 1/3 ergibt 0 (hier ist '1' eine int)
    res = 1.0/3 ergibt 0.333... (hier ist '1.0' eine double)

    Du solltest diese Thematik in jedem c/c++ Buch auf den ersten paar seiten finden. Good Luck.

    PS: oohhh crap, too late.


Anmelden zum Antworten