23 % -5 = -2
23 % 5 = 3
Может кто-нибудь объяснить мне, как я могу это понять, потому что у меня завтра экзамен. Я хочу сказать, потому что -5 * -5 =25
, а затем 25 -2 = 23
, вот как они получают 23
. Это правильно?
23 % -5 = -2
23 % 5 = 3
Может кто-нибудь объяснить мне, как я могу это понять, потому что у меня завтра экзамен. Я хочу сказать, потому что -5 * -5 =25
, а затем 25 -2 = 23
, вот как они получают 23
. Это правильно?
В Python знак остатка совпадает со знаком знаменателя (что отличается от таких языков, как C, где он совпадает со знаком числителя). ).
Математически всегда гарантируется, что если a, b = divmod(n, d)
, то a*d + b == n
.
Обратите внимание, что 23//5 == 4
и 23//-5 == -5
(Python всегда выполняет деление на пол). Таким образом, у нас есть 4*5 + 3 == 23
и -5*-5 - 2 == 23
, как вы сказали.
Запишем это как N=kM+R.
У нас есть 23 = -5*(-5) - 2 и 23 = 4*5 + 3.
Итак, 23% 5 = 3, так как 4*5 = 20, и когда вы разделите 23 на 20, вы получите остаток 3. Вы можете думать об этом как о шкафе, который вы можете пройти, не перебирая.
Что касается 23 % -5, то этот ответ отличается от одного языка программирования к другому.
Для Python это -2, потому что он всегда будет возвращать значение делителя, и это потому, что 5 * 5 = 25, и когда вы делите 23 на 25 в Python, вы получаете остаток -2 (поскольку он должен быть отрицательным, потому что делитель был отрицательным ), то есть 25 - 2 = 23.
Стоит отметить, что формальное математическое определение гласит, что b — положительное целое число.
[0], ... [n-1]
, но это не обязательно. [42]
и [-99]
- совершенно хорошие классы эквивалентности по модулю 2.
- person nneonneo; 28.09.2012
b
, поэтому я сделал предположение.
- person nneonneo; 28.09.2012
% в Python использует «операцию по модулю»; это отличается от получения напоминания об операции деления таким образом, что.
a - int(a/n) * n
хотя иногда он эквивалентен в некоторых компьютерных языках.
Математическое выражение можно найти здесь: http://en.wikipedia.org/wiki/Modulo_operation
Итак, очевидно, что в Python операция "%" использует следующее выражение:
mod(a, n) = a - n * floor(a / n)
Следовательно,
23%-5 = mod(23,-5) = 23-(-5) * пол(23/-5) = 23-(-5) *-5 = -2
а также
23%5 = мод(23, 5) = 23 - 5 * этаж (23/5) = 23 - 5 * 4 = 3
Кроме того, вы находите интересным, что
-23%5 = мод(-23,5) = (-23) - 5 * этаж (-23/5) = -23 - 5 * (-5) = 2
так как действие floor() будет принимать целочисленное значение к отрицательной бесконечности.
math.fmod
, чтобы получить то же поведение, что и в C или Java. - person 0x2b3bfa0   schedule 28.01.2017