Натуральные числа и вещественные числа обладают тем свойством, что (n + d)/d равно (n/d) +1. Вещественные числа имеют дополнительное свойство, которое (-n)/d равно - (n/d). Можно определить целые числа, чтобы иметь одно из указанных выше свойств, но не оба.
Хотя первое свойство часто является более полезным из двух, самый простой способ реализовать целочисленное деление с отрицательным дивидендом, как в аппаратном, так и в программном обеспечении, состоит в том, чтобы инвертировать знак дивиденда, а затем инвертировать знак результат. Ранние языки выполняли целочисленное деление таким образом, потому что это было легко; тот факт, что многие программы были написаны, чтобы ожидать такого поведения, многие традиции продолжались в традиции.
Возможно, лучше всего использовать язык «слово» (например, divt
) для деления, а не для пунктуации. Это позволит коду указывать, хочет ли он усеченное деление или разделение на пол, желает, чтобы компилятор произвольно выбирал то, что было бы самым быстрым в любом данном сценарии, или желает, чтобы компилятор сделал что-нибудь с отрицательными номерами в обмен для повышения числа положительных чисел (например, на процессоре с инструкцией «без знака», которая быстрее, чем «подписанное разделение», такой оператор позволит процессору использовать «беззнаковый»). Тем не менее, я не знаю других языков, которые это делают.
Это был выбор дизайна: http://python-history.blogspot.com/2010/08/why-pythons-integer-division-floors.html – Mark