int Wenn ich einen Wert einer Gleitkommaberechnung auf eine Variable auf einen unsigned int mit impliziter Typumwandlung ersten zuweisen, dann zuweisen, dass, komme ich eine Antwort. Aber wenn ich die gleiche Berechnung direkt dem vorzeichenlosen int zuweiße, wiederum mit implizitem Casting, bekomme ich eine andere Antwort.durch unterschiedliches Ergebnis von „gleicher“ Art gegossene Verdutzt float
unten Beispielcode ich kompiliert und lief zu demonstrieren:
#include <iostream>
int
main(int argc, char** argv)
{
float payloadInTons = 6550.3;
// Above, payloadInTons is given a value.
// Below, two different ways are used to type cast that same value,
// but the results do not match.
float tempVal = payloadInTons * 10.0;
unsigned int right = tempVal;
std::cout << " right = " << right << std::endl;
unsigned int rawPayloadN = payloadInTons * 10.0;
std::cout << " wrong = " << rawPayloadN << std::endl;
return 0;
}
Hat jemand Einblick, warum „richtig“ ist richtig, und „falsch“ ist falsch?
By the way, ich bin mit gcc 4.8.2 auf Ubuntu 14.04 LTS, wenn es darauf ankommt.
Es wäre ein bisschen mehr ... beeindruckend, wenn Sie auch die Ausgabe, die Sie sehen, mit einschließen. Auf [ideone.com] (http://ideone.com/0SMdPN) habe ich 'right = 65503 wrong = 65502'. – unwind
Dies hat das C-Tag, aber es sieht aus wie C++. –
Es ist wegen der Präzision. Wenn Sie beide mit "100.0" anstelle von "10.0" multiplizieren, werden Sie es verstehen. –