int division in qt



  • Grüße Alle,

    In Qt gibt es Probleme mit folgender Division :
    ioynat

    unsigned 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 :
    272928800

    Als 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... 🤡 😉


Anmelden zum Antworten