Разница между mod и rem в Clojure
Я не мог понять разницу между этими двумя (mod
& rem
) функции.
2 ответов
пример Clojuredoc для rem
описывает разницу:
;; rem and mod are commonly used to get the remainder.
;; mod means Gaussian mod, so the result is always
;; non-negative. Don't confuse it with ANSI C's %
;; operator, which despite being pronounced
;; 'mod' actually implements rem, i.e. -10 % 3 = -1.
user=> (mod -10 3)
2
user=> (rem -10 3)
-1
mod
возвращает разность первого числа и самого большого целое (возможно, отрицательный) кратно второму числу, которое меньше первого числа:rem
это просто остаток.
(rem -4 3) => -1
здесь нет ничего удивительного: -4 делится на 3 -1 С -1 "слева".Но странность случается, если мы используем mod:
(mod -4 3) => 2
:
- наибольшее целое число, кратное 3 меньше -4, равно -6.
- -4 минус -6-это 2.
поэтому, хотя они обычно действуют аналогично, mod делает не возвратить остаток, он делает что-то более конкретное.