Rechenfehler oder liegts am int? [gelöst]

Verschiedenes zu Qt
Antworten
Qt-nator
Beiträge: 153
Registriert: 18. Dezember 2007 10:31

Rechenfehler oder liegts am int? [gelöst]

Beitrag von Qt-nator »

Hi,

ich hab 2 Funktionen die eine zum errechnen die andere zum zurückrechnen.
Mein problem ist jetzt das die errechnen Funktion X * Y einen kleineren Wert zurückgibt obwohl es beides ganzzahlen sind. Hab mit dem Taschenrechner nachgerechnet und gesehn das ein Falsches Ergebniss kommt. So bei kleinen Zahlen funktioniert es aber. Da hab ich gedacht das es vieleicht am Integer liegt weil das so eine Zahl nicht schaft.

Rechnung:

1216027634 * 163831 = 965280894(im Programm) mit Rechner

199223023305854 //Ist die Zahl vieleicht zu groß?

Gruß

Qt-nator
Zuletzt geändert von Qt-nator am 14. Juli 2008 13:16, insgesamt 1-mal geändert.
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

Die deutsche Schriftsprache ist case-sensitive. Außerdem gibt es eine Interpunktionsnorm. Wenn manch einer seine Programme genauso schlampig schreibt, wie sein Posting hier, dann sollte er es lieber bleiben lassen.
Qt-nator
Beiträge: 153
Registriert: 18. Dezember 2007 10:31

Beitrag von Qt-nator »

Hab ich versucht aber ohne ergebniss deswegen hier mal der Code vieleicht ist da ja schon was falsch.

Code: Alles auswählen


QStringList list1 = test.split("-");
 
 int nNummber = 0;
  
 int nListLegenth = list1.size();
 
 for(int i = 0; i < nListLegenth; i ++)
 {
   int nListContain = list1.value(i).toInt();

   nNummber += nListContain;
 }

 __int64 nCrypt = nCurrentTime * nNummber;

return nCrypt;
}

der string besteht Aus zahlen Reihen die zusammengezählt 163831 ergeben hab ich auch mit dem Taschenrechner nachgerechnet. Das dann nNummber. Ja und nCurrentTime ist mein Parameter der Funktion und soll dann eine UnixTime Angebe sein.

Beide Zahlenwerte Stimmen bei der Rechnung(nCurrentTime & nNummber) nur das Ergebniss weicht total davon ab.
Volker
Beiträge: 343
Registriert: 30. Juni 2005 05:27

Beitrag von Volker »

Qt-nator hat geschrieben:

Code: Alles auswählen

 int nNummber = 0;  
 int nListLegenth = list1.size();

 // ...
 __int64 nCrypt = nCurrentTime * nNummber;

return nCrypt;
}
Bin mir grad nicht sicher aber ich denke das wird wie folgt vom Compiler umgesetzt:

Code: Alles auswählen

__int64 nCrypt = (__int64) ((int) nCurrentTime * (int) nNummber);
Das heißt, das Ergebnis der Rechnung ist zunächst mal ein int und wird erst anschließend auf __int64 gecastet. Da ist der Überlauf aber schon passiert. Evtl. hilft's wenn Du nCurrentTime und nNummber auch als __int64 Variable verwendest
Bitte seid so nett und ändert den Titel von Beiträgen die gelöst wurden, auf [gelöst] Beitragstitel
Qt-nator
Beiträge: 153
Registriert: 18. Dezember 2007 10:31

Beitrag von Qt-nator »

Ja also das hat geholfen jetzt kommen die richtigen Werte raus danke.

Musste nur alles auf __int64 setzen.
Antworten