C++. Как реализовать деление на большие числа? [закрыто]C++

Программы на C++. Форум разработчиков
Anonymous
C++. Как реализовать деление на большие числа? [закрыто]

Сообщение Anonymous »

Я пишу алгоритм (долгое деление, если не ошибаюсь) на C++ для класса, обрабатывающего большие числа.
Он работает для одного теста, но не работает для другого, и я не нашел проблема. Работает следующий тест (числа выражены в системе счисления 2^8):

Код: Выделить всё

Integerc const a{122, 17, 200,43};
Integerc const b{23, 117};

auto const qr{computeQrByDivision(a, b)};

QVERIFY((qr.first == Integerc{5, 52, 54}));
QVERIFY((qr.second == Integerc{17, 125}));
Код, который дает сбой (числа выражены в системе счисления 2^64, тестовые значения найдены с помощью двоичного деления):

Код: Выделить всё

Integerll const a("0b10101011110100110001100110101111100010110000011001001100100101110100111011100110100100101110001010001100110111011001101010011011000010111111001010110101010");
Integerll const b("0b100010001011011011011011001110101100100110101011101100101000011011111110010011010101101010101011111110010101010");

auto const qr{computeQrByDivision(a, b)};

QVERIFY((qr.first == Integerll{22110129672729ull}));
QVERIFY((qr.second == Integerll{19184386057769ull, 9219185875676460304ull}));
Я получаю: qr.first = {5147ull} и qr. Second = {68825254845149ull, 9973720520820606070ull}.
Код является шаблонным и очень длинным. , но доступен здесь (функция ComputeQrByDivision(), строка 3001 из Integer.h): https://github.com/Julien-Livet/TestInt ... h-division.
Я реализую сначала алгоритм двоичного поиска, затем алгоритм двоичного деления. Теперь я хочу настроить длинное деление.

Подробнее здесь: https://stackoverflow.com/questions/793 ... ig-numbers

Вернуться в «C++»