Этот вопрос закрыт для ответов, так как повторяет вопрос Оператор // в Python?
@vohman

Как работают операции // и % в Python для отрицательных чисел?

Я ожидал само-собой разумеющегося результата для выражений 10//3 и 10%3 : получил 3 и 1 соответственно.
Но когда сделал то же самое для отрицательного 10, получил неожиданно "странный" результат:
- 10//3 == - 4
- 10%3 == 2
Попробовав divmod(10, 3) и divmod(-10, 3) получил тот же результат, что естественно.
Выходит, что результат работы операторов целочисленного деления и деления по модулю в Python для отрицательных чисел подчиняется совершенно не классическим математическим законам, а рассчитывается по какой-то своей зависимости-функции.
Действительно, в математике 10//3 и -10//3 будет отличаться лишь знаком (3 и -3).
help(divmod) объясняет, что результат divmod(x, y) подчиняется такому закону div*y + mod == x.
Хотелось бы понять, как в Python можно быстро понять (посчитать в "уме") результат операции x//y и x%y при отрицательных значениях (для положительных считается легко и привычно)?
И чем обоснована такая зависимость в Python для этих операций, а не "классическая" математическая?
  • Вопрос задан
  • 128 просмотров
Пригласить эксперта
Ответы на вопрос 2
@AVKor
И чем обоснована такая зависимость в Python для этих операций, а не "классическая" математическая?

Всё полностью соответствует тому, как в математике. Просто вы её не знаете.
Ответ написан
@vohman Автор вопроса
Я, конечно же, не дипломированный математик :)) как мне написали, но школьную математику я еще осилю ))
По поводу округления и в какую сторону - этого нет в понятии целочисленного деления в математике, да и вроде как в Питоне для не отрицательных чисел такое округление не делается.
К тому же -10/3 = -3.33333333.... и округление (раз мне предлагают им воспользоваться) будет в сторону -3 - это в математике. И так поступают в основном в других языках.

Выходит, что в математике :
(-10) "целочисленно разделить на" (3) равен (-4) ?
Я всегда думал, что -10 div 3 равно в математике -3.
---------
Допустим, я не знаю математику..
Тогда на Си результат -10 div 3 будет -3 -1 ( Результат нижеприведенного кода: Quotient and remainder: -3 -1 )
#include stdio.h
#include stdlib.h
int main(void)
{
div_t n;
n = div(-10,3);
printf("Quotient and remainder: %d %d\n", n.quot, n.rem);
return 0;
}

На старом Pascal результатом -10 целочисленно разделить на 3 будет так же (-3)
var result : integer;
begin
result := -10 div 3;
writeln('Result = ', result);
end.

Почему же на Python результат ( -4 ) ? - нет, понятно, что считается он соответственно своего какого-то закона. Но как это быстро в голове посчитать согласно той формуле, что указана была мной выше?
И на каком основании это деление считается в Питоне вот так а не "как обычно"?
Ответ написан
Ваш ответ на вопрос

Вопрос закрыт для ответов и комментариев

Потому что уже есть похожий вопрос.
Похожие вопросы
Popmechanic Москва
от 100 000 до 150 000 руб.
Panda Media Нижний Новгород
от 70 000 руб.
НЛ Континент Новосибирск
от 60 000 до 100 000 руб.
17 авг. 2018, в 11:42
21000 руб./за проект
17 авг. 2018, в 11:12
1000 руб./в час
17 авг. 2018, в 11:09
35000 руб./в месяц