Typenumwandlung
-
Hallo,
in meinem Buch steht folgendes:short size(512); double erg, x=1.5; erg=size/10*x;Dann steht zuerst wird 512/10 berechnet. Das würde 50 ergeben, und in Double konvertiert werden, bevor es mit x multipliziert wird. Aber wieso 50 kommt da nicht 51 raus?
-
Nein, es würde als erstes zu einem int gecastet werden, weil weder 512, noch 10 vom Typ double sind.
Um dies zu überprüfen, kannst du folgendes machen:
std::cout.setf(std::ios_base::boolalpha); // Ausgabe von bool-Werten: true/false, anstatt 1/0 std::cout << "short size/10 == double: " << (typeid(size/10) == typeid(double)) << std::endl; std::cout << "short size/10 == int: " << (typeid(size/10) == typeid(int)) << std::endl;Ausgabe:
`short size/10 == double: falseshort size/10 == int: true`
Um einen Cast nach double zu erreichen, könntest du zum einen
sizeals double deklarieren oder aber die Genauigkeit der 10 verändern, damit wenigstens eine der beiden Zahlen vom Typ double sind:10.0Überprüfen:
std::cout.setf(std::ios_base::boolalpha); std::cout << "short size/10.0 == double: " << (typeid(size/10.0) == typeid(double)) << std::endl; // oder.. double size = 512.0; // .0 ist optional, meiner Meinung nach ist es aber dadurch besser sichtbar, dass es sich um eine Variable des Typs double handelt std::cout.setf(std::ios_base::boolalpha); std::cout << "double size/10 == double: " << typeid(size/10) == typeid(double)) << std::endl;Ausgabe:
`short size/10.0 == double: true
double size/10 == double: true
`
Warum da nun - vom fehlenden Cast nach double mal abgesehen - 50 anstatt von 51 rauskommen soll, verstehe ich aber nicht, denn bei mir ist 512/10 = 51(.2 <- "abgeschnitten", weil nach int gecastet), dh. es sollte am Ende 76.5 herauskommen (51 * 1.5 = (dank diesmal vorhandenem double korrekt gecastet) 76.5) bzw. bei komplett richtiger Rechnung: 51.2 * 1.5 = 76.8)
-
genau so hätte ich das auch gesehen. Da ist dem Buch(C++ lernen und professionell anwenden) wohl ein Fehler drinnen.