На языках, которые я тестировал, - (x div y )
не равно -x div y
; Я тестировал //
в Python, /
в Ruby, div
в Perl 6; C имеет аналогичное поведение.
Это поведение обычно соответствует spec, так как div
обычно определяется как округление результата деления, однако оно не имеет большого смысла с арифметической точки зрения, поскольку оно приводит к тому, что div
ведет себя по-другому, в зависимости от на знаке, и это вызывает путаницу, такую как этот пост о том, как это делается на Python.
Есть ли какое-то конкретное обоснование этого дизайнерского решения, или просто div
определяется таким образом с нуля? По-видимому, Guido van Rossum использует аргумент согласованности в блоге, в котором объясняется, как это делается на Python, но вы также можете иметь согласованность, если вы решите округлить.
(Вдохновленный этим вопросом PMurias в IRC-канале # perl6)