целочисленное деление в 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:
Савва указал, что именно так в Японии учат положительной арифметике, а не отрицательным числам. Однако, по его словам, это можно распространить и на отрицательные числа.
источники: