Integer-Division mit negativem Operand
-
int a = -5, b = 2; int c = a / b;
Ist c immer -3, -2 oder ist dies eine undefinierte Operation?
-
Das ergibt -2.
-
Mit meinem Compiler und auf meinem PC ergibt das auch -2, ich muss aber sichergehen, dass das ein Teil des ISO 14882 ist, dass negative Integer-Divisionen IMMER gegen 0 gerundet werden.
-
So weit ich weiß, ist das in C++ nicht festgelegt und hängt damit vom Prozessor ab.
-
Praetorian schrieb:
Mit meinem Compiler und auf meinem PC ergibt das auch -2, ich muss aber sichergehen, dass das ein Teil des ISO 14882 ist, dass negative Integer-Divisionen IMMER gegen 0 gerundet werden.
Ich hab zwar keinen passenden Auszug aus dem Standard parat, kann mich aber dunkel erinnern, dass dort festgelegt ist, dass bei Ganzzahldivision der Nachkommaanteil des Ergebnisses einfach abgeschnitten wird. Dh es wird nicht gerundet. Somit ergibt deine Rechnung immer -2.
-
Da gibt es nix zu runden, da keine Konvertierung in einen Fließkommawert stattfindet.
Es ist definiert, dass (a/b)*b + a%b wieder a ergibt für ein positives Vorzeichen von a und b. Hat a oder b ein negatives Vorzeichen, so ist das Vorzeichen von a%b 'implementation defined' - an der Wertigkeit des Ergebnisses ändert sich aber nichts.
(nachzulesen im Standard unter 5.6 Clause 4)
-
Jo, es wird nichts gerundet. Die Nachkommazahlen werden einfach abgeschnitten.
-
milo51 schrieb:
Jo, es wird nichts gerundet. Die Nachkommazahlen werden einfach abgeschnitten.
Nochmal, es gibt keine Nachkommastellen. Es wird eine Ganzzahl-Division gemacht. Die lernt man schon in der Grundschule
-
Öhm...oO...ja ok...aber das lernt man doch nicht in der Grundschule, versteh das jetzt noch nicht mal exakt
Naja, bzw. doch, aber die Formel kenn ich nicht, das hatte ich noch nie^^
-
7H3 N4C3R schrieb:
Nochmal, es gibt keine Nachkommastellen. Es wird eine Ganzzahl-Division gemacht. Die lernt man schon in der Grundschule
Schon klar, dass eine Ganzzahldivision keine Nachkommastellen liefert. Aber für "gewöhnliche" Menschen ist 5 / 2 = 2.5, und nicht 2 Rest 1. Deshalb die "Nachkommastellen", auch wenn sie hier rein theoretischer Natur sind.
-
Also habe ich euch jetzt richtig verstanden, -5/2 ist IMMER -2?
-
Ja!
-
Wunderbar, danke.