Форум программистов, компьютерный форум CyberForum.ru

Деление по модулю отрицательных чисел - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 28, средняя оценка - 5.00
bossman
4 / 4 / 0
Регистрация: 20.06.2010
Сообщений: 147
10.10.2012, 23:01     Деление по модулю отрицательных чисел #1
Какие в математике правила для деления по модулю отрицательных чисел?
Например -15(mod 26).
Почему в этом случае С++(mvc++) дает результат 7?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.10.2012, 23:01     Деление по модулю отрицательных чисел
Посмотрите здесь:

C++ Деление по модулю
C++ Сумма положительных и отрицательных по модулю элементов массива
C++ деление по модулю
Деление шеснадцатиричных чисел C++
C++ деление по модулю 2
Деление по модулю C++
Деление двух чисел C++
C++ Деление по модулю, работа с функцией rand()
Деление комплексных чисел C++
Деление по модулю 2 C++
C++ Среди отрицательных элементов целочисленного массива найти максимальный по модулю
C++ Деление по модулю %

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nullpointer
 Аватар для nullpointer
45 / 45 / 5
Регистрация: 30.03.2009
Сообщений: 518
10.10.2012, 23:42     Деление по модулю отрицательных чисел #2
Не знаю что у вас там неправильно считает, но у меня ответ верный выдает равный 11.
Попробуйте написать так -15%26 это тоже самое.
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1238 / 987 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
11.10.2012, 00:06     Деление по модулю отрицательных чисел #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Деление с остатком числа a на b — это представление a в виде bq + r, где r ∈ [0; b). Такой способ единственнен. Для вашего случая: –15 = 26 × –1 + 11.

Что касается С++, то по стандарту % должен удовлетворять уравнению (a / b) * b + a % b == a. То есть должен вообще возвращать –15, так как -15 / 26 == 0.
bossman
4 / 4 / 0
Регистрация: 20.06.2010
Сообщений: 147
11.10.2012, 00:11  [ТС]     Деление по модулю отрицательных чисел #4
(a / b) * b + a % b == a.
(a / b) * b зачем умножение на b в формуле

Добавлено через 2 минуты
как я понял изза того что там целочисленное деление
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1238 / 987 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
11.10.2012, 00:15     Деление по модулю отрицательных чисел #5
Потому что ⌊a / b⌋ = (a − a mod b) / b, где ⌊a⌋ = округление вниз a.

Но в C++ ⌊a⌋ трактуется (обычно, в стандарте так и написано) как [a] — целая часть, округление к нулю. Немного нетождественных преобразований — и получаем, что должно выходить –15. В принципе, это не нарушает первое уравнение, если забить на ограничение значения остатка: –15 = 26 × 0 + (–15), но выглядит странно.
Thinker
Эксперт C++
 Аватар для Thinker
4216 / 2190 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
11.10.2012, 08:23     Деление по модулю отрицательных чисел #6
Добавлю. Сама теорема звучит так:
для любых целых a и b, http://www.cyberforum.ru/cgi-bin/latex.cgi?b\neq 0, существует, и притом единственное, разложение вида
a = bq+r, где q,r - целые и http://www.cyberforum.ru/cgi-bin/latex.cgi?0\leq r < |b|.
Из этой теоремы получается важное следствие:
для любых целых a и b, http://www.cyberforum.ru/cgi-bin/latex.cgi?b>1, существует, и притом единственное, разложение вида
http://www.cyberforum.ru/cgi-bin/latex.cgi?a = a_tb^t+...+a_1b+a_0, где http://www.cyberforum.ru/cgi-bin/latex.cgi?0\leq a_0,...,a_t < b. Коэффициенты данного разложения это цифры числа a в b-ичной системе счисления:
http://www.cyberforum.ru/cgi-bin/latex.cgi?a = (a_t...a_1a_0)_b
Yandex
Объявления
11.10.2012, 08:23     Деление по модулю отрицательных чисел
Ответ Создать тему
Опции темы

Текущее время: 16:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru