Javascript оценивает следующий фрагмент кода как -1.
-5 % 4
Я понимаю, что теорема об остатках утверждает, что a = bq + r такое, что 0 r ‹ b. Учитывая приведенное выше определение, не должен ли ответ быть 3? Почему JavaScript возвращает -1?
Javascript оценивает следующий фрагмент кода как -1.
-5 % 4
Я понимаю, что теорема об остатках утверждает, что a = bq + r такое, что 0 r ‹ b. Учитывая приведенное выше определение, не должен ли ответ быть 3? Почему JavaScript возвращает -1?
Потому что это оператор остатка, а не по модулю. Но есть предложение по правильному.
Цитата из Ecma 5.1
остаток r от делимого n и делителя d определяется математическим соотношением r = n − (d × q), где q — целое число, отрицательное, только если n/d отрицательно, и положительное, только если n/d положительно
Большинство языков программирования используют симметричный модуль, который отличается от математического для отрицательных значений.
Математический модуль можно вычислить, используя симметричный модуль следующим образом:
a mod b = ((a % b) + b) % b
mod
по математическому модулю
%
симметричный по модулю
... если остаток отличен от нуля, есть два возможных варианта остатка: один отрицательный, а другой положительный, а также два возможных варианта для частного. Обычно в теории чисел всегда выбирается положительный остаток, но языки программирования выбирают в зависимости от языка и знаков a и n. (http://en.wikipedia.org/wiki/Modulo_operation)
в питоне, который принимает знак делителя:
-5 % 4 == 3 # -5 = (-2) * 4 + 3
в javascript, который принимает знак делителя:
-5 % 4 == -1 # -5 = (-1) * 4 - 1
Если вы используете %
для модульной арифметики, не имеет значения (по крайней мере, концептуально), будет ли -5 % 4
оцениваться как -1 или 3, потому что эти два числа конгруэнтны по модулю 4: для целей модульной арифметики они одинаковый.
-1
..NET
возвращает-1
. - person Matt Burland   schedule 08.09.2014(-5)%4
и-(5%4)
. Другими словами, это зависит от приоритета%
по сравнению с-
. Изменить: на самом деле похоже, что-
должен иметь более высокий приоритет, чем%
(4 против 5) - person Matt Burland   schedule 08.09.2014