PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit fmod()



Spurius
06.08.2006, 15:39
Hallo,
ich versuche gerade, fmod() zu verwenden, um den Rest einer Division zu erhalten, aber es klappt teilweise nicht.

Mit fmod(47,10) müsste ich als Ergebnis 7 erhalten, bekomme aber 6!

fmod(32,10) liefert dagegen das korrekte Ergebnis 2.

Habt ihr ne Idee, wo der Fehler ist?

Gruß

Spurius

ogni42
07.08.2006, 10:24
float fmod ( float x, float y )

Du musst das Ergebnis auch als float überprüfen. Zur Umwandlung in einen int musst Du vorher 0.5 hinzuaddieren, da beim casten immer abgerundet wird.

Spurius
07.08.2006, 12:57
Hallo,
vielen Dank, das wars! Was genau ist "casten" ?

ogni42
07.08.2006, 13:03
Typumwandlung, z.B.



int i = 0;

i = fmod(42, 4);


Hier finden mehrere implizite Typumwandlungen statt:
42 und 4 werden von int nach float gewandelt, und das Ergebnis von fmod wird von float nach int gewandelt, wobei die Nachkommastellen weggeworgen werden.

robocat
07.08.2006, 13:39
int i=47%10; -> i=7

müsst doch für ganzzahlen besser geeignet sein oder?

gruesse

ogni42
07.08.2006, 14:57
Das ist richtig. Laut Topic will er's aber für Fließkommazahlen wissen. Also z.B.



float remainder = fmod(42.3, 7.6);