У меня есть задание в университете, где мне нужно написать функции для данной основной программы. Это все в c.C Программирование - использование по модулю суммы целых без знака, которые переполняются
Итак, моя проблема в том, что мне нужно использовать модуль из суммы двух целых без знака.
uint32_t mod_add(uint32_t x, uint32_t y, uint32_t n)
{
uint32_t res;
res = (x + y) % n;
Это прекрасно работает, когда сумма х и у ниже 2^32-1. Моя проблема в том, что, когда сумма превышает это значение, она явно переполняется, а значение по модулю ошибочно.
В моем назначении x = 2^32-3; y = 1174501 и n = 2^32-1 (n - по модулю); Мой результат: 1174497, это должно быть 1174499.
У кого-нибудь есть идеи, как это решить?
попробуйте 'res = ((uint64_t) x + y)% n;' вместо. – BLUEPIXY
да .... не разрешено использовать 64-битный ... вот в чем проблема. –