int division in qt
-
Grüße Alle,
In Qt gibt es Probleme mit folgender Division :
ioynatunsigned long int start = 0, start2 = 0; ... start = 272928800 start2 = 272928800
Als Ergebnis von :
(start / start2)kommt raus, die Zahl : 5
Es sollte doch problemlos 100 rauskommen.wenn ich hingegen folgendes mache :
((double)start /start2), dann kommen wie erwartet 100 raus.Eine integer-division sollte doch allgemein funktionieren.
-
Zu aller erst hat dein Problem nichts mit Qt zu tun, sondern ist ganz normales C/C++.
Und dann versteh ich weder wie du auf 5 kommst, noch wie du auf die 100 kommen willst.
unsigned long int start = 0, start2 = 0; start = 272928800; start2 = 272928800; // Wie du beschrieben hast, wird start durch start2 dividiert und das Ergebnis ausgegeben printf("%d", start/start2);
Hier erhält man als Ausgabe 1, nicht mehr und nicht weniger; ist auch irgendwie logisch wenn die Variablen start und start2 den exakt selben Wert haben.
-
Er hat sich sicher verschrieben. Zuerst in seinem Code, und dann nochmal in seinem Beispiel hier...
-
der code oben ist falsch, hier der richtige code :
unsigned long int start1 = 0, start2 = 0; ... (start2 * 100) / start1;
start1 und start2 haben zu diesem Zeitpunkt den selben Wert :
272928800Als Ergebnis sollte 100 rauskommen. Stattdessen ist das Ergebnis
5. Wenn ich hingegen folgendes mache :((double)start2 * 100) / start1;
kommt exakt 100 raus.
-
hättest du den Beitrag nicht schon gestern geschrieben, würd ich auf einen Aprilscherz tippen...
-
Das glaube ich genausowenig. Poste doch bitte mal einen vollständigen Code mit allen relevanten Passagen! Dein letztes Beispiel ohne weitere Erklärungen würde auf eine Division durch 0 hinauslaufen... Jedenfalls hast du da irgendeinen Fehler drin.
-
Was sagt denn der Debugger?
rya.
-
Probier mal (start2 * 100LL) / start1
EDIT: 272928800*100 ist zu groß für ein 4-Byte-int (Überlauf). Da deine Werte unsigned sind, kommt da auch nix negatives raus, sondern ein Wert, der bei der Division dann eben 5 ergibt... Mit "*100LL" multiplizierst du mit einem long long, der dann für das richtige Ergebnis sorgt.
EDIT2: Und ich wollte dir nicht glauben...