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]
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.