cout
C/C++
C++ неправильный остаток от деления
В языках программирования остаток от деления всегда равен:
И пока n и k неотрицательные числа, проблем не возникает.
А вот дальше все языки делятся на 2 группы:
В первой группе в качестве результата целочисленного деления берётся ближайшее целое число, не превышающее частное вещественного деления (округление к минус бесконечности).
В этих языках (Python) частное: 34 / 6 == 5, но -34 / 6 == -6.
Остаток: -34 % 6 = -34 - (-34 / 6) * 6 = -34 - -6 * 6 = -34 + 36 = 2
Во второй группе результат целочисленного деления получается отбрасыванием дробной части вещественного деления (округление к нулю).
В этих языках (С++) частное: 34 / 6 == 5 и -34 / 6 == -5.
Остаток: -34 % 6 = -34 - (-34 / 6) * 6 = -34 - -6 * 5 = -34 + 30 = -4
Оба варианта математически абсолютно корректны - просто это две разные операции целочисленного деления. И какая из них будет использована в языке программирования, зависит только от разработчиков этого языка. Например, в стандарте Forth 79 прописано округление к нулю, а в стандарте Forth 83 - к минус бесконечности.
n % k = n - (n / k) * k
Где / - целочисленное деление.И пока n и k неотрицательные числа, проблем не возникает.
А вот дальше все языки делятся на 2 группы:
В первой группе в качестве результата целочисленного деления берётся ближайшее целое число, не превышающее частное вещественного деления (округление к минус бесконечности).
В этих языках (Python) частное: 34 / 6 == 5, но -34 / 6 == -6.
Остаток: -34 % 6 = -34 - (-34 / 6) * 6 = -34 - -6 * 6 = -34 + 36 = 2
Во второй группе результат целочисленного деления получается отбрасыванием дробной части вещественного деления (округление к нулю).
В этих языках (С++) частное: 34 / 6 == 5 и -34 / 6 == -5.
Остаток: -34 % 6 = -34 - (-34 / 6) * 6 = -34 - -6 * 5 = -34 + 30 = -4
Оба варианта математически абсолютно корректны - просто это две разные операции целочисленного деления. И какая из них будет использована в языке программирования, зависит только от разработчиков этого языка. Например, в стандарте Forth 79 прописано округление к нулю, а в стандарте Forth 83 - к минус бесконечности.
Ваня Бурский
и кому верить?
"Операция взятия остатка в языках программирования может возвращать отрицательный результат (для отрицательного делимого или делителя). "
https:// ru.wikipedia.org/wiki/Деление_с_остатком#Знак_остатка
https:// ru.wikipedia.org/wiki/Деление_с_остатком#Знак_остатка
Ваня Бурский
почему
Shatodru Sanial
Арифметика в C/C++ не всегда совпадает с школьной. Например, 5/3 равно точно 1 :)
Авторы языков решили, что так удобнее.
Авторы языков решили, что так удобнее.
А вы сначала прибавьте к (-34)-м столько 6-к, чтобы получилось неотрицательное число. Он же не использует модульную арифметику какую-нибудь, а просто выносит минус за эту операцию)
-34 это допустим твой долг, ты его разбиваешь на 6 недель
Деление этого числа на 6 получаем по -5 долг который ты должен отдавать каждую неделю -5*6 = 30 ты отдашь за 6 недель. Осталось тебе отдать еще 4, то бишь -4 об этом и говорит.
Так что по логике все в с++
-5 + -5 + -5 + -5 + -5 + -5 + -4 = -34
(6*-5) + -4 = -34
Деление этого числа на 6 получаем по -5 долг который ты должен отдавать каждую неделю -5*6 = 30 ты отдашь за 6 недель. Осталось тебе отдать еще 4, то бишь -4 об этом и говорит.
Так что по логике все в с++
-5 + -5 + -5 + -5 + -5 + -5 + -4 = -34
(6*-5) + -4 = -34
Ваня Бурский
если % - остаток от деления
Как он может быть отрицательным?
Как он может быть отрицательным?
5*6= 30
34-30 = 4
34-30 = 4
Ваня Бурский
print(-34 % 6);
почему Python выдает другой остаток? Вот посмотри, что говорит эта умная женщина 
C++ при целочисленном делении отсекает дробную часть, то бишь округляет к нулю, а не в меньшую сторону, как питон.

C++ при целочисленном делении отсекает дробную часть, то бишь округляет к нулю, а не в меньшую сторону, как питон.
Похожие вопросы
- Сколько раз нужно взять остаток от деления числа на кол-во единиц в его двоичном представлении, чтобы получить 0
- Задача на C++ (Остатки).
- Неправильный вывод программы C++
- Код на c++ выводит неправильную сумму элементов побочной диагонали двумерного массива
- Какие из этих книг вы посоветуете прочесть в первую очередь чтобы повысить свои знания в C/C++?
- Задача по C++
- День добрый \[-_-]/ вопрос по вузовскому программированию на си(C)
- Программирование C++ ПРОШУ ПОМОЧЬ!
- Почему создатель Linux Линус Торвальдс называет C++ ужасным языком, а ядро ОС Linux пишется только на Си?
- Сделать перестановку чисел с помощью функции в C++, но у меня получается чепуха