C-Programm – eulersche Zahl

closeDieser Beitrag wurde vor mehr als drei Monaten veröffentlicht. Bedenke bitte, dass die hier angebotene Information nicht mehr aktuell und gültig sein könnte. Informiere dich daher bitte auch an anderer Stelle über dieses Thema. Sollten sich neue Informationen ergeben haben, so kannst du mich auch gerne auf diese über einen Kommentar hinweisen. Vielen Dank!

Hier noch ein Beipspiel für eine Funktion, in welcher die „eulersche Zahl“ zu einem bestimmten Exponenten berechnet wird…

#include <stdio.h>

/* 

Die Exponentialfunktion e^x kann als eine unendliche Reihe geschrieben werden, um sich dem Ergebnis anzunaehern!!!

------
e^x = 1 + x + x²/2! + x³/3! + x⁴/4! + ... = 1 + x + 1/2*x² + 1/6*x³ + 1/24*x⁴ + ...  
------

i! ist hier die Fakultaet von i und ist definiert als

------
i! = 1*2*3* ... *(i-1)*i
------

- 1.) die Fakultaet ist fortlaufend mit den aufsteigenden ganzen Zahlen zu multiplizieren
- 2.) die Potenz ist fortlaufend mit Exponenten zu multiplizieren
- 3.) die Summanden koennen aus Fakultaet & Potenz berechnet werden
- 4.) die Summenbildung wird abgebrochen, wenn die Summanden kleiner als eine bestimmte Genauigkeit (Epsilon) werden

*/

double exp_fkt( double exponent) {
	int fakultaet=1; /* i! */
	double potenz=1.0; /* x^i */
	double resultat=1.0, summanden;
	int n=1;

	do {
		fakultaet *= n; // 1.)
		potenz *= exponent; // 2.)
		summanden = potenz/fakultaet; // 3.)
		resultat = resultat + summanden;
		printf("%3d %12d %12.6f %12.6f\n", n, fakultaet, summanden, resultat); // test - Ausgabe
		n++;
	} while (summanden >= 0.0001); // 4.)

	return resultat;
}

int main(void) {
	double exponent;

	printf("Berechnung von e^x\n\n");
	printf("Exponent = "); scanf("%lf", &exponent);

	printf("\nDurchlauf Fakultaet Summanden Resultat\n");
	printf("----------------------------------------\n");
	printf("\nexp(%.1lf) = %.16lf\n", exponent, exp_fkt(exponent));

	return 0;
} 

Veröffentlicht von

voku

Lars Moelleken | Ich bin root, ich darf das!

  • Jonas

    Ich würde die DO WHILE Schleife der Lesbarkeit halber so verändern…

    do {

    fakultaet = fakultaet * n;//1
    potenz = pow(exponent,n); //2
    summanden = potenz/fakultaet; //3
    resultat = resultat + summanden;
    printf(„%5d %12d %12.6f %12.6f %12.6fn“, n, fakultaet, summanden, resultat, potenz); // test – Ausgabe
    n++;
    } while (summanden >= pow(10,-4)); // 4.)

    ein #include vorausgesetzt wg. der pow(x,y) Funktion

    aber sonst ziemlich cool.

  • Danke für das Feedback… werde es gleich mal testen.

  • Jonas

    // So will mein Prof das haben, ist aber auch ziemlich elegant…
    #include
    #include

    double exp_fkt(double exponent, float epsilon) {
    double resultat=1.0, summanden= 1.0;
    int n=1;

    do {
    summanden = summanden *exponent/n;
    resultat = resultat + summanden;
    printf(„%5d %12.4lf n“, n, resultat);
    n++;

    } while (fabs(summanden) >= epsilon);

    return resultat;
    }

    int main(void) {
    double exponent;
    float genauigkeit=0.0001;

    printf(„Berechnung von e^xnn“);
    printf(„Exponent = „); scanf(„%lf“, &exponent);

    printf(„nDurchlauf Resultatn“);
    printf(„——————–n“);
    printf(„nexp(%.1lf) = %.16lfn“, exponent, exp_fkt(exponent,genauigkeit));
    return 0;

    }