2013-05-13 6 views
5

Próba zrobienia podziału wartości ujemnych w Ruby, np. -123/10, dlaczego zwraca -13 zamiast -12?podział liczby całkowitej w języku Ruby z wartością ujemną

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 zwraca -12 i -123% 10 zwraca -3 w C/C++ zgodnie z oczekiwaniami.

+1

Wynik '-123% 10' w C i C++ to, AFAIK, zależne od platformy więc być ostrożnym przy użyciu zachowań C jako standard. –

Odpowiedz

7

Tak to zostało zaprojektowane. Ruby zaokrągla liczby w kierunku ujemnej nieskończoności w przypadku negatywnego podziału i działania modulo. To nie jest unikalne dla Ruby, Python i Perl też tak zachowują.

Jednak takie podejście zapewnia dobry powód matematyczny.

a/b = q z pozostałą r

takie, że

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

Z tego co czytałem, to jest jak arytmetyka jest nauczana w Japonii.

Edit:

sawa wskazał, że w ten sposób pozytywny arytmetyka jest nauczana w Japonii, a nie liczb ujemnych. Jednak, jak powiedział, można to rozszerzyć również na liczby ujemne.

Źródła:

Ruby Forums

+0

Twój cytat (tak samo jak oryginał) wprowadza w błąd. 1. Formuła ta jest rzeczywiście taka, jak jest nauczana w szkołach podstawowych w Japonii, ale nie tylko w Japonii. 2. Japońskie szkoły podstawowe nie uczą liczb ujemnych. Otrzymujesz to zachowanie, rozszerzając formułę na liczby ujemne. Nie dlatego, że tak go uczono. – sawa

+1

@sawa Zaktualizowano moją odpowiedź, biorąc pod uwagę twój komentarz. –

+0

Ruby Forums link jest martwy :( –

Powiązane problemy