целочисленное деление в Ruby с отрицательным значением

пытаясь сделать отрицательное деление значения в Ruby, например -123 / 10, почему он возвращает -13 вместо -12 ?

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 возвращает -12 и -123%10 возвращает -3 В C / C++, как ожидалось.

1 ответов


вот как он разработан. Ruby округляет числа до отрицательной бесконечности в случае отрицательного деления и операции по модулю. Это не уникально для Ruby, Python и Perl ведет себя так же.

однако этот подход дает хорошую математическую причину.

a / b = q с остатком r

такое, что

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

из того что я читал, это как арифметика преподается в Япония.

Edit:

Савва указал, что именно так в Японии учат положительной арифметике, а не отрицательным числам. Однако, по его словам, это можно распространить и на отрицательные числа.

источники:

Руби Форумов