P
Vertexwahn schrieb:
Bei der Divison zweier int Variablen oder Zahlen ist zu beachten, daß das Ergebnis ebenfalls wieder ein int Wert liefert. Ob eventuelle Kommastellen gerundet oder abgeschnitten werden, ist kompilerabhängig. Hier ist also Vorischt geboten.
Ich glaube der Author hat da nur unsinn geschrieben oder mal schlechte Erfahrungen mit einem schlechten Compiler gemacht...
Vielleicht bezog er sich auf das alte K&R C, vielleicht war das da implementationsabhaengig.
Frueher, in den 60ern und 70ern, waren Computer oft Einzelstuecke, und da gab es die merkwuerdigsten Sachen: Wortaddressierte Maschinen, 21-Bit-Ganzzahlen, 9-Bit-Bytes, Rechner, die nur Fliesskommazahlen haben, usw.
Was man bei der Zuweisung von "long double", "double" oder "float" nach "int" beachten muss, ist allerdings, dass bei Fliesskommazahlen mit fester Bit-Breite (z.B. 32 oder 64 oder 80 Bit) ja nicht jede Zahl darstellbar ist. D.h. es kann vorkommen, dass eine Fliesskommazahl nicht als Ganzzahl darstellbar ist, weil der Wertebereich der Fliesskommazahl zu klein ist. Das kann z.B. bei kaufmaennischen Berechnungen ein Problem sein, wo man sich darauf verlassen muss, dass jede Zahl darstellbar ist.
Deswegen verwendete man frueher im kaufmaennischen Bereich hauptsaechlich COBOL, weil es dort BCD Zahlen gab, bei denen keine Informationen verloren gingen.
(EDIT: Ueberigens, die beste Methode, um Sicherzugehen, dass bei einer Zuweisung von Fliesskomma nach Ganzzahl kein Mist rauskommen kann, ist die Funktionen floor() bzw. ceil() vor dem Cast auf int aufzurufen.)