On Friday 01 October 2004 11:53, Bernhard Walle wrote:
es wurden dir ja schon einige Antworten gegeben. Üblich ist aber eigentlich nicht float sondern double (bei "normalen" Programmen):
Jein. Das wird IMHO meistens überschätzt - wenn man nicht gerade etliche
Iterationen hat, so daß sich Rundungsfehler ansammeln. In der Praxis reicht
"float" normalerweise dicke aus.
Generell muß man aber natürlich beachten, daß man mit Gleitkommazahlen immer
mit Rundungsfehlern zu rechnen hat - und das z.B. bei Vergleichen
berücksichtigen.
Was z.B. gerne zu Problemen führt, ist so etwas:
double x = wildeBerechnung();
if ( x == 42.0 )
{
... // wird praktisch nie passieren - Rundungsfehler
}
else
{
printf( "Huch?!\n" );
}
Das muß man dann eher so lösen:
double x = wildeBerechnung();
if ( fabs( x - 42.0 ) < 1e-5 )
{
... // zuverlässiger
}
else
{
printf( "Puh!\n" );
}
d.h. man prüft eigentlich nie mehr auf Gleichheit, sondern auf sehr geringe
Unterschiede. Ansonsten hat man Pech gehabt, wenn x gerade einen Wert wie
41.99998 oder 42.00001 hat - was durch Rundungsfehler sehr schnell passiert.
CU
--
Stefan Hundhammer