2013-05-13 6 views
5

Der Versuch, eine negative Werteinteilung in Ruby, z. -123/10, warum gibt es -13 statt -12 zurück?Integer-Division in Ruby mit negativem Wert

ruby -v 
ruby 1.9.3p375 (2013-01-18) [x86_64-darwin12.2.1] 

irb(main):001:0> -123/10 
=> -13 
irb(main):002:0> -123%10 
=> 7 

-123/10 Returns -12 und -123% 10 -3 kehrt in C/C++, wie erwartet.

+1

Das Ergebnis '-123% 10' in C und C++ ist, AFAIK, plattformabhängig so vorsichtig sein, um das C Verhalten als Standard. –

Antwort

7

So wird es entworfen. Bei negativer Division und Modulo-Operation rundet Ruby Zahlen gegen die negative Unendlichkeit ab. Das ist nicht nur bei Ruby, Python und Perl so.

Dieser Ansatz bietet jedoch einen guten mathematischen Grund.

a/b = q mit Rest r

so dass

b * q + r = a and 0 <= r < b 

Von dem, was ich gelesen habe, das ist, wie Arithmetik in Japan gelehrt wird.

Edit:

sawa wies darauf hin, dass es sich dabei, wie positive Arithmetik in Japan gelehrt wird, keine negativen Zahlen. Wie er jedoch sagte, kann dies auch auf negative Zahlen ausgedehnt werden.

Quellen:

Ruby Forums

+0

Ihr Zitat (sowie das Original) ist irreführend. 1. Diese Formel wird tatsächlich in Grundschulen in Japan gelehrt, aber nicht nur in Japan. 2. Japanische Grundschulen unterrichten keine negativen Zahlen. Sie erhalten dieses Verhalten, indem Sie die Formel auf negative Zahlen erweitern. Nicht weil es so gelehrt wurde. – sawa

+1

@sawa Aktualisierte meine Antwort, indem ich Ihren Kommentar berücksichtigte. –

+0

Ruby Foren Link ist tot :( –

Verwandte Themen