Я бы предложил использовать полные байты или слова, а не строки.
Относительно легко основываться на 256, а не на 10, и гораздо эффективнее для процессора не делать умножения и деления на 10 все время.В идеале, выбирайте размер слова, который равен половине естественного размера слова процессора, поскольку это облегчает выполнение переноса.Конечно, думать на базе 64K или 4G немного сложнее, но даже лучше, чем на базе 256.
Единственным недостатком является генерация начальных больших чисел из входных данных ascii, которые вы получаете бесплатно в базе 10. Использованиебольший размер слова вы можете сделать это более эффективным, если сначала обработать несколько цифр в одно слово (например, 9 цифр за раз в 4G), а затем выполнить длинное умножение этого одиночного слова до правильного смещения в формате большого целого числа..
Компромисс может состоять в том, чтобы запустить ваш двигатель на базе 1 млрд. Это все равно будет в 9 или 81 раз эффективнее, чем при использовании базы 10!
Самый простой способ решить это уравнение - этоумножьте a / b * d / d и c / d * b / b, чтобы они оба имели общий знаменатель b * d.
Я думаю, что вам нужно будет сначала разложить на множители ваши большие числа e и f, чтобы найти общие факторы.Не забудьте снова искать тот же коэффициент в квадрате.
Конечно, это означает, что вы должны написать простое порождающее сито.Вам нужно только сгенерировать множители с точностью до квадратного корня или половины цифр от минимального значения e и f.
Вы можете использовать простые множители b и d, чтобы получить меньший начальный знаменатель, но вам потребуетсяв любом случае сделайте это снова после добавления.