Разница между 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 делает не возвратить остаток, он делает что-то более конкретное.

вы можете найти эти примеры clojuredocs полезными.