PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Frage zu C


Gast
2008-12-03, 16:38:02
Ich bastel grad an einer Funktion. Wie kommt es, dass in C

res = res + (1.0 / i)*(1.0 / i) genau den selben Output liefert wie res = res + (1.0 / (i * i))?

Müsste C da nicht durch die Rundungen in dem Datentypen Double bei großen Zahlen n nicht unterschiedliche Ergebnisse ausspucken?!

Bei double partialsumme(long int n) ist die oberste Grenze, damit sich der Output nicht mehr ändert ja n0 = 94906265. Darf man das damit begründen, dass die Mantisse von Double nur 52 bit hat? ; n0 = 2^((Mantisse+1/)2)

Nur wieso habe ich bei der zweiten Funktion genau dieses n0 nicht mehr?

Ich habe folgenden Code:



#include <stdio.h>

double partialsumme(long int n)
{
long int i;
double res;
res=0;
for (i=1; i<=n; i++)
{
res = res + (1.0 / i)*(1.0 / i);
}
return res;
}

double partialsumme_r(long int n)
{
long int i;
double res;
res=0;
for (i=n; i >= 1; i--)
{
res = res + (1.0 / i)*(1.0 / i);
}
return res;
}


double partialsumme_f(long int n)
{
long int i;
double res;
res=0;
for (i=1; i<=n; i++)
{
res = res + (1.0 / (i * i));
}
return res;
}

int main(void)
{
long int a = 0;
double summe = 0, summe2 = 0, summe3 = 0;
printf("Partialsumme fuer n = ");
scanf(" %li",&a);

summe = partialsumme(a);
summe2 = partialsumme_r(a);
summe3 = partialsumme_f(a);

printf("Normal %.64f\n",summe);
printf("Rueck %.64f\n",summe2);
printf("Quick %.64f\n",summe3);
}