Seite 1 von 1

Rechenfehler oder liegts am int? [gelöst]

Verfasst: 14. Juli 2008 11:42
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

Verfasst: 14. Juli 2008 12:15
von macman

Verfasst: 14. Juli 2008 12:29
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.

Verfasst: 14. Juli 2008 12:52
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

Verfasst: 14. Juli 2008 13:15
von Qt-nator
Ja also das hat geholfen jetzt kommen die richtigen Werte raus danke.

Musste nur alles auf __int64 setzen.