Остаток от деления в С/С++(возможно и в других языках программирования)

глюки остаток деление

Думаю, всем известно, что остаток от деления есть натуральное число, просто согласно его определению. т.е. 5 / 3=1(ост.2), -5 / 3 = 2(ост. 1).
Вопрос. Почему в C/C++ (-5) % 3= -2? Или же, почему в C/C++(может и в других языках программирования) имеет место быть отрицательный остаток от деления? Как решить проблему?

Примечание:
К примеру тут http://www.eunnet.net/books/numbers/text/1.html есть в том числе и про остаток от деления.

Примечание:
Да, попросту не знаю как по-английски "остаток от деления", по-этому не почитал что по этому поводу на зарубежных ресурсах пишут)
Ответы:
Потому что это логично
Ты был должен 5 рублей
решили разделить долг на троих..
Стали должны каждый по рублю
Но как делить ДОЛГ в два рубля?
Потому что это не остаток от деления, а вот такая вот хитрая операция, которая иногда выдаёт отрицательный результат. А для положительных чисел действительно выдаёт остаток.
Решение — если получили отрицательный результат, прибавлять делитель.
Такое ощущение, что он дополняет в обратную сторону (до 6). Тогда уж вычитать из делителя результат.
> всем известно, что остаток от деления есть натуральное число
Вы не правы. Остаток от деления отрицательного числа на положительное - есть отрицательное число. То есть, -5 / 3 = -1(ост. -2). (По крайней мере, такие правила приняты в западноевропейской/американской математической культуре. Но сдаётся мне, что в российских математических традициях ситуация та же).
А в чём заключается Ваша проблема? Может быть она решится, если использовать функцию абсолютного значения (модуля) числа? (Вероятно, в С/С++ эта функция называется также, как и в большинстве языков программирования - abs).
Maloletov,
вот именно, что так в европейской математической культуре, в российской остаток всегда неотрицательный (я не поленился, в математическую энциклопедию заглянул). Но распространённые языки программирования родом из-за границы, поэтому и считают не по-нашему.
а в чем проблема остаток сделать без знака ? в си нету функции Abs() или ей подобной?
Есть такая функция практически в любом ЯП.
Имхо, проблема надумана!
one и прочие, предлагающие использовать модуль. Легко заметить, что |-2| не равно 1.
У нас довольно чётко прописано, что такое модуль и что такое остаток, и как они ведут себя при разных знаках операндов. Тут, я так понимаю, хочется, чтоб был mod.
Давайте порассуждаем:
Пусть есть два числа A и B и есть две операции
ЦЕЛОЕ( A / B ) = c
ОСТАТОК( A / B ) = d
Можно записать такое равенство:
A = ЦЕЛОЕ( A / B ) * B + ОСТАТОК( A / B )
A = c * B + d
Подставив вместо A -5 и вместо B 3
Получим уравнение
-5 = c * 3 + d
Оно имеет два варианта решения:
-5 = -2 * 3 + 1
-5 = -1 * 3 - 2
Что б не было этой неоднозначности математики давно согласились, что остаток должен быть положитленым (См [1]). Математикам было все равно, а вот компьютеру оказалось не всеравно.
malek, спасибо. Буду знать.
Sipa, тогда алгоритм очень простой. Вычисляем остаток «по-американски»: (-5) % 3= -2. Если остаток отрицательный, складываем его с делителем: 3+(-2)=1. Получается остаток «по-русски».
=Да, попросту не знаю как по-английски "остаток от деления", по-этому не почитал что по этому поводу на зарубежных ресурсах пишут)=
=И уверен, что для задач где время вычислений важно - выберут вариант c '-2'.=


16 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.