История изменений
Исправление wandrien, (текущая версия) :
Алгоритм, который мне известен:
Наверное я там херню несу.
Пойдём сначала.
Пусть мы умеем умножать числа некоторой разрядности, получая числа разрядности в 2 раза больше, что можно схематически записать вот так:
x
x
--
xx
А нам нужно научиться умножать вот такие числа:
xx
xx
----
xxxx
Для этого мы с «половинками» чисел производим операции умножения, получив 4 числа, а затем складываем их:
00xx <- множитель b.l * a.l
0xx0 <- множитель a.h * b.l
0xx0 <- множитель b.h * a.l
xx00 <- множитель a.h * b.h
Получаем произведение нужного размера.
Для того, чтобы убедиться, что знаковый результат в пределах числа размерности xx
, нужно убедиться, что старшая половина произведения состоит из бит, совпадающих по значению со старшим битом в младшей части.
Так?
Исправление wandrien, :
Алгоритм, который мне известен:
Наверное я там херню несу.
Пойдём сначала.
Пусть мы умеем умножать числа некоторой разрядности, получая числа разрядности в 2 раза больше, что можно схематически записать вот так:
x
x
--
xx
А нам нужно научиться умножать вот такие числа:
xx
xx
--
xxxx
Для этого мы с «половинками» чисел производим операции умножения, получив 4 числа, а затем складываем их:
00xx <- множитель b.l * a.l
0xx0 <- множитель a.h * b.l
0xx0 <- множитель b.h * a.l
xx00 <- множитель a.h * b.h
Получаем произведение нужного размера.
Для того, чтобы убедиться, что знаковый результат в пределах числа размерности xx
, нужно убедиться, что старшая половина произведения состоит из бит, совпадающих по значению со старшим битом в младшей части.
Так?
Исправление wandrien, :
Алгоритм, который мне известен:
Наверное я там херню несу.
Пойдём сначала.
Пусть мы умеем умножать числа некоторой разрядности, получая числа разрядности в 2 раза больше, что можно схематически записать вот так:
x
x
--
xx
А нам нужно научиться умнодать вот такие числа:
xx
xx
--
xxxx
Для этого мы с «половинками» чисел производим операции умножения, получив 4 числа, а затем складываем их:
00xx <- множитель b.l * a.l
0xx0 <- множитель a.h * b.l
0xx0 <- множитель b.h * a.l
xx00 <- множитель a.h * b.h
Получаем произведение нужного размера.
Для того, чтобы убедиться, что знаковый результат в пределах числа размерности xx
, нужно убедиться, что старшая половина произведения состоит из бит, совпадающих по значению со старшим битом в младшей части.
Так?
Исходная версия wandrien, :
Алгоритм, который мне известен:
Наверное я там херню несу.
Пойдём сначала.
Пусть мы умеем умножать числа некоторой разрядности, получая числа разрядности в 2 раза больше, что можно схематически записать вот так:
`` x x
xx ``
А нам нужно научиться умнодать вот такие числа:
xx
xx
--
xxxx
Для этого мы с «половинками» чисел производим операции умножения, получив 4 числа, а затем складываем их:
00xx <- множитель b.l * a.l
0xx0 <- множитель a.h * b.l
0xx0 <- множитель b.h * a.l
xx00 <- множитель a.h * b.h
Получаем произведение нужного размера.
Для того, чтобы убедиться, что знаковый результат в пределах числа размерности xx
, нужно убедиться, что старшая половина произведения состоит из бит, совпадающих по значению со старшим битом в младшей части.
Так?