Re: C: Dividieren
Stefan Hundhammer <[email protected]>
| Newsgroups | gmane.linux.suse.programming |
|---|---|
| Organization | SuSE Linux AG |
| Message-ID | <[email protected]> |
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 <[email protected]> Penguin by conviction.
YaST2 Development
SuSE Linux AG
Nuernberg, Germany
--
Um die Liste abzubestellen, schicken Sie eine Mail an:
[email protected]
Um eine Liste aller verfügbaren Kommandos zu bekommen, schicken
Sie eine Mail an: [email protected]