Beispielaufgabe - e^x

Hallo,

ich hab mir aus dem Netz ein paar Übungsaufgaben geholt,
dabei war auch eine zur Berechnung von e^x bis zu einer bestimmten Genauigkeit.

e^x = 1 + x/1! + x^2/2! + x^3/3! + …

Mit Python funktioniert das auch sehr gut, mit demselben Algorithmus, aber mit C++ kommt SEHR schnell inf als Ergebnis heraus.
Irgendwie hab ich keine Idee mehr was ich falsch mache, könnt ihr mir helfen?

mfg TLF

PS: source
– snip –
#include

#define EPSILON 0.001

/*! fakultät x! berechnen */
unsigned int fact (unsigned int x)
{
unsigned int result = 1;
for (x; x > 0; x–)
result *= x;
return result;
}

int main (int argc, char* argv[])
{
if (argc != 2)
{
std::cout EPSILON)
{
old_result = result;
result += pow (x, i) / fact (i);
i++;
}

std::cout

Hallo TLF,

ich hab mir aus dem Netz ein paar Übungsaufgaben geholt,
dabei war auch eine zur Berechnung von e^x bis zu einer
bestimmten Genauigkeit.

e^x = 1 + x/1! + x^2/2! + x^3/3! + …

Mit Python funktioniert das auch sehr gut, mit demselben
Algorithmus, aber mit C++ kommt SEHR schnell inf als Ergebnis
heraus.
Irgendwie hab ich keine Idee mehr was ich falsch mache, könnt
ihr mir helfen?

Welchen Compiler verwendest du denn ???

Je nach Implementierung ist „int“ nur 16-Bit, was in fact() bei 9! = 362880 schon zu einem Überlauf führt, bzw C mit einem Wert von 35200 rechnet.
Versuche statt „int“ „long“ zu verwenden, möglicherweise versteht dein Compiler auch „long long“, was dann einer 64-Bit Variablen entspricht.

Was stand da im K&R ?
Man darf nur annehmen, dass char

hallo peter

Welchen Compiler verwendest du denn ???

gcc 3.3.3

Je nach Implementierung ist „int“ nur 16-Bit, was in fact()
bei 9! = 362880 schon zu einem Überlauf führt, bzw C mit einem
Wert von 35200 rechnet.
Versuche statt „int“ „long“ zu verwenden, möglicherweise
versteht dein Compiler auch „long long“, was dann einer 64-Bit
Variablen entspricht.

ah, wunderbar, funzt, (*grumpf*, darauf hätte ich kommen können )

vielen dank
mfg TLF