LINUX.ORG.RU

История изменений

Исправление 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, нужно убедиться, что старшая половина произведения состоит из бит, совпадающих по значению со старшим битом в младшей части.

Так?