Integer-Overflow ermitteln
lima-city → Forum → Programmiersprachen → C/C++ und D
addition
assembler
aufwand
code
ergebnis
extra abfrage
flag
frage
multiplikation
ungleich null
zahl
zufriedenstellende antwort
zugriff
-
Das ist eine Frage, die bestimmt schon oft gestellt wurde aber ich hab bis jetzt noch keine zufriedenstellende Antwort gefunden.
Wie bekomme ich heraus, dass der Zahlenbereich für Integer oder Long nicht mehr für das Ergebnis ausgereicht hat. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Du kannst überprüfen, ob das Ergebnis kleiner ist als eine der Ausgangszahlen, ist das der Fall, so war da wohl ein Overflow.
-
MMMHH... das funktioniert nur bei der Addition, die Multiplikation kann mehrmals rum wrappen. Dh auch wenn a*b > b und a*b > a kann es trotzdem sein, dass es nicht stimmt.
-
bladehunter schrieb:
leider kann ich nicht ausschließen, dass a ungleich Null ist, womit ich nochmal eine extra Abfrage hätte viel Aufwand.
Ich würde sonst folgendes vorschlagen:
int a=ZAHL; int b=ZAHL; int c=ZAHL; c=a*b; if(c/a!=b)overflow();
In C selber hat man leider keinen Zugriff auf die Overflow Flag. Aber falls du Assembler kannst, kannst du damit überprüfen, ob ein Ergebnis zu groß ist.
das wäre die ideale Lösung, leider kann ich kein Assembler -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage