Мне нужен алгоритм, который использует два 32-битных целых числа в качестве параметров, и возвращает умножение этих параметров на два других 32-разрядных целых числа: 32-разрядная часть и 32-разрядная часть ,Сплит Умножение целых чисел
Я хотел бы попробовать:
uint32_t p1, p2; // globals to hold the result
void mult(uint32_t x, uint32_t y){
uint64_t r = (x * y);
p1 = r >> 32;
p2 = r & 0xFFFFFFFF;
}
Хотя это работает , это не гарантирует существование 64-разрядных целых чисел в машине, ни является их использование компилятором.
Итак, как наилучшим образом его решить?
Примечание 1: На самом деле, это не сработало, потому что мой компилятор не поддерживает 64-битные целые числа.
Obs: Пожалуйста, избежать с помощью boost
.
Вы можете обрабатывать каждое число и продукт в виде строки и выполнять умножение школы в брутфорсе. Затем разделите продукт на две части соответственно. –
Это действительно так, но я думаю, что может быть более быстрый и довольно умный способ сделать это. Поскольку я имитирую процессор, он должен быть как можно быстрее. –
Вы проверили [эту тему] (http://stackoverflow.com/q/18425513/69809)? – Groo