tr0nix
der-mit-dem-tux-tanzt
Sali zaeme
Ich bin gerade wieder am C lernen und implementiere gerade den Algorithmus zum ausrechnen der eulerschen Zahl.
Mit dem Exponent 1 und der oben stehenden Formel erhalte ich das Resultat von 2.7182818... was laut wikipedia.org auch korrekt ist.
Ich definiere eine gewisse Genauigkeit die man eingeben kann. Sprich als Beispiel eine Genauigkeit von 1E-10. Wenn x^y/y! nun kleiner ist, als die Genauigkeit, bricht er ab.
Beim y = 16 bricht er bei mir jedoch ab, da das Resultat im negativen Bereich liegt.
Hier mein Code (ja ich weiss es gibt pow() in math.h fuer Exponentialrechnen):
Das lustige nun: ich habe herrausgefunden, dass i_fak ueber den gueltigen Bereich des int hinausgeht. So schlau wie ich bin, habe ich daraus also ein "unsigned int" gemacht. Danach kommen jedoch nach dem Ueberschreiten des Grenzwertes so lustige Ausgaben wie:
Was ist das? Infinity als Ausgabe fuer einen int? Wie kann man dies am besten abfangen?
Gruess
Joel
Ich bin gerade wieder am C lernen und implementiere gerade den Algorithmus zum ausrechnen der eulerschen Zahl.
e^x = x + 1 + x^2/2! + x^3/3! + x^4/4! + ...
Mit dem Exponent 1 und der oben stehenden Formel erhalte ich das Resultat von 2.7182818... was laut wikipedia.org auch korrekt ist.
Ich definiere eine gewisse Genauigkeit die man eingeben kann. Sprich als Beispiel eine Genauigkeit von 1E-10. Wenn x^y/y! nun kleiner ist, als die Genauigkeit, bricht er ab.
Beim y = 16 bricht er bei mir jedoch ab, da das Resultat im negativen Bereich liegt.
resultat: 0.50000000000000000000 - e: 2.50000000000000000000 - schritt: 1
resultat: 0.16666666666666665741 - e: 2.66666666666666651864 - schritt: 2
resultat: 0.04166666666666666435 - e: 2.70833333333333303727 - schritt: 3
resultat: 0.00833333333333333322 - e: 2.71666666666666634100 - schritt: 4
...
resultat: 0.00000000049892481304 - e: 2.71828183008457191505 - schritt: 14
resultat: 0.00000000049895489307 - e: 2.71828183058352701451 - schritt: 15
resultat: -0.00000000346593732254 - e: 2.71828182711758969958 - schritt: 16
Hier mein Code (ja ich weiss es gibt pow() in math.h fuer Exponentialrechnen):
Code:
#include <stdio.h>
int main(void)
{
double e, resultat, potenz, genauigkeit;
int x, i, i_fak;
printf("EULERSCHE ZAHL BERECHNEN\n");
printf("------------------------\n\n");
printf("Bitte x eingeben: "); scanf("%d", &x);
printf("Bitte Genauigkeit eingeben: "); scanf("%lf", &genauigkeit);
e = x + 1;
i = 2;
i_fak = 2;
potenz = x;
do
{
potenz *= x;
resultat = potenz / i_fak;
e += resultat;
printf("resultat: %1.20lf - e: %1.20lf - schritt: %d\n", resultat, e, i - 1);
i_fak *= ++i;
} while( resultat > genauigkeit );
printf("Die Potenz der Eulersche Zahl mit Exponent %d ist: %1.20lf\n", x, e);
}
Das lustige nun: ich habe herrausgefunden, dass i_fak ueber den gueltigen Bereich des int hinausgeht. So schlau wie ich bin, habe ich daraus also ein "unsigned int" gemacht. Danach kommen jedoch nach dem Ueberschreiten des Grenzwertes so lustige Ausgaben wie:
Code:
resultat: Infinity - e: Infinity - schritt: 33 - potenz: 1.000000 - i_fak: 0
Was ist das? Infinity als Ausgabe fuer einen int? Wie kann man dies am besten abfangen?
Gruess
Joel