type cast bei division
-
Hallo,
Wenn ich folgendes Programm ausführe, erhalte die angefügte Ausgabe.
Programm:
#include <iostream> using namespace std; int main() { float a = 1; float b = 0.001; int ires = a / b; float fres = a / b; cout << "ires: " << ires << endl << "fres: " << fres << endl; return 0; }Ausgabe:
ires: 999 fres: 1000Mich würde interessieren, ob dieses Verhalten Standard ist oder ein Fehler meines Compilers (gcc 4.3.2 unter Linux).
Wie kann ich, sollte dieses Verhalten so vorgesehen sein, erreichen, dass auch die integer-Variable das richtige Ergebnis enthält?
Calvin-gr
-
sie erhalten beide das richtige Ergebnis. Float hat Ungenauigkeiten (Rundungsfehler), daher ist a/b irgendsowas wie 999.99997f. Wenn du den float ausgibst mit 4 Stellen Genauigkeit wird aufgerundet -> 1000.000. Wenn du den float an ein int übergibst wird gecastet und zwar so, dass einfach die Nachkommastellen abgeschnitten werden -> 999.
-
Und falls du ein gerundetes Ergebnis wünscht, so kannst du das beispielsweise durch
int ires = a / b + 0.5; // Kaufmännische Rundung, mathematische Rundung ist ein bisschen kompliziertererreichen.
-
ok, danke für die antworten.