Eulersche Zahl berechnen



  • Hi,

    ich habe folgendes vor:

    die eulersche Zahl mit einer Taylorreihe berechnen
    K
    ∑ 1/i!
    i=0

    mein Programm schaut wie folgt aus:

    #include <stdio.h>
    
    int long long fakultaet(int kx)
    {
    
    	int long long fak =1;
    	int x=1;
    	do
    	{
    
    		fak *= x;
    		x ++;
    
    	}while(kx>=x);
    
    	return fak;
    }
    
    int main()
    
    {
    	double ezahl;
    	int i=0;
    	int k=1;
    
    	do
    	{
    		i++;
    		ezahl = 1/fakultaet(i)+1/fakultaet(i+1);
    
    	}while(k>i);
    	return 0;
    }
    

    Habe bereits festegestellt, dass das Programm bereits in der fakultaet Funktion nicht die richtigen Werte rausgibt. Für k=1 kommt auch 1 heraus. Sobald ich allerdings k erhöhe, kommen nurnoch Nullfolgen.

    Zur info: wenn ich die Fakultätsfunktion in ein eigenes Programm schreibe und kx in der Funktion deklariere Funktioniert das Programm einwandfrei!

    Ich danke schonmal im voraus!



  • 1/fakultaet(i) ist int geteilt durch long long int. Um das zu berechnen, konvertiert der Compiler die 1 nach long long int und führt dann eine Division zweier long long int Werte aus. Das Ergebnis ist auch long long int, also in den meisten Fällen 0 (nämlich wenn die Fakultät > 1 ist).

    Lösung: Einer der beiden Operanden sollte vom Typ double sein, dann wird der andere auch nach double konvertiert und die Division in double durchgeführt. Beispielsweise 1.0/fakultaet(i)

    (Ach ja, du wirst dann merken, dass der Algorithmus immer noch falsch ist, aber das kriegst du schon hin.)



  • Hello again, habe das Programm nun umgeschrieben und die Funktion aufgelöst. War irgendwie alles kompliziert gemacht von mir. Ich möchte euch einfach nur die endgültige Funktion zeigen und stolz auf mich sein 😃 und was noch viel wichtiger ist, euch/dir danken für die Hilfe :)!!!!

    Gruß

    #include <stdio.h>
    #include <math.h>
    
    int main()
    
    {
    	double ezahl;
    	int i=0;
    
    	int long long fak =1;
    	do
    	{
    		i++;
    		fak *= i;
    		ezahl += (1.0/fak);
    
    	}while(ezahl<(ezahl+1.0/fak));
    
    	ezahl += 1;				//da 0! =1!!!
    	printf("Errechnete Eulersche Zahl: %lf", ezahl);
    	printf("\n\nAnzahl durchlaeufe: %d",i);
    	printf("\n\nEulersche Zahl nach math.h: %lf",M_E);
    	return 0;
    }
    


  • das sieht gut aus.
    aber

    double ezahl=0;
    

Log in to reply