Проходя операцию по модулю (проспект, в который я вошел, исследуя разницу между rem
иmod
), я наткнулся на:
В математике результатом операции по модулю является остаток от евклидова деления. Однако возможны и другие соглашения. Компьютеры и калькуляторы имеют различные способы хранения и представления чисел; таким образом, их определение операции по модулю зависит от языка программирования и / или базового оборудования.
Вопросов:
- Проходя евклидово деление, я обнаружил, что остаток этой операции всегда положительный (или 0). Какое ограничение базового компьютерного оборудования заставляет разработчиков языков программирования отличаться от математики?
- У каждого языка программирования есть предопределенное или неопределенное правило, согласно которому результат операции по модулю получает свой знак. Какое обоснование принимается при разработке этих правил? И если проблема связана с базовым оборудованием, не должны ли правила меняться в соответствии с этим, независимо от языка программирования?
(-3)/2 == -1
. Это определение может быть полезным. Когда вы хотите %
соответствовать этому разделению, x == (x/y)*y + x % y
вы в конечном итоге получаете определение %
используемого в C #.