Вытащу сюда вопрос из темы.
Хочется узнать, какие есть оптимальные алгоритмы перемножения знаковых чисел заданного размера.
Алгоритм, который мне известен:
1. Расширить операнды знаком в 2 раза.
2. Перемножить расширенные операнды алгоритмом беззнакового умножения, получив произведение, которое имеет в 4 раза больше бит, чем исходные операнды.
3. Трактуем произведение как число в дополнительном коде: если полученное значение укладывается в диапазон значений исходного типа, то переполнения нет, если не укладывается — значит переполнение.
Ну то есть, например: для перемножения 256-битных чисел нам придётся оперировать 1024-битным произведением. Что несколько дохрена.
Хочется алгоритм, который не потребует честно вычислять все старшие биты произведения.
(UPD: не, вроде херня какая-то)