~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ 21EB13A7E6C859B50E4AD558DDE5651C__1715313780 ✰
Заголовок документа оригинал.:
✰ Division algorithm - Wikipedia ✰
Заголовок документа перевод.:
✰ Алгоритм деления — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/Division_algorithm ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/21/1c/21eb13a7e6c859b50e4ad558dde5651c.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/21/1c/21eb13a7e6c859b50e4ad558dde5651c__translat.html ✰
Дата и время сохранения документа:
✰ 21.06.2024 18:13:53 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 10 May 2024, at 07:03 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

Алгоритм деления — Википедия Jump to content

Алгоритм деления

Из Википедии, бесплатной энциклопедии

Алгоритм деления — это алгоритм , который по двум целым числам N и D (соответственно числителю и знаменателю) вычисляет их частное и/или остаток — результат евклидова деления . Некоторые из них наносятся вручную, а другие используются с помощью цифровых схем и программного обеспечения.

Алгоритмы деления делятся на две основные категории: медленное деление и быстрое деление. Алгоритмы медленного деления производят одну цифру конечного частного за итерацию. Примеры медленного деления включают восстановление , невыполняющееся восстановление, невосстановление и деление SRT . Методы быстрого деления начинаются с близкого приближения к конечному частному и выдают вдвое больше цифр конечного частного на каждой итерации. [1] Алгоритмы Ньютона-Рафсона и Гольдшмидта попадают в эту категорию.

Варианты этих алгоритмов позволяют использовать быстрые алгоритмы умножения . В результате для больших целых чисел компьютерное время , необходимое для деления, с точностью до постоянного коэффициента такое же, как и время, необходимое для умножения, независимо от того, какой алгоритм умножения используется.

Обсуждение будет относиться к форме , где

это вход, и

это выход.

Деление повторным вычитанием [ править ]

Самый простой алгоритм деления, исторически включенный в алгоритм наибольшего общего делителя , представленный в Евклида «Началах» , Книга VII, Предложение 1, находит остаток по двум положительным целым числам, используя только вычитания и сравнения:

R   :  =   N 
 Q   :  =   0 
 в то время как   R    D   do 
   R   :  =   R   -   D 
   Q   :  =   Q   +   1 
 конец 
 возврата   (  Q  ,  R  ) 

Доказательство того, что частное и остаток существуют и уникальны (описано в разделе «Евклидово деление» ), приводит к созданию полного алгоритма деления, применимого как к отрицательным, так и к положительным числам, с использованием сложения, вычитания и сравнения:

функция   делить  (  N  ,   D  ) 
   , если   D   =   0   , то   ошибка  (  DivisionByZero  )   заканчивается, 
   если   D   <   0   , то   (  Q  ,   R  )   :  =   делить  (  N  ,   D  );    return   (  -  Q  ,   R  )   конец, 
   если   N   <   0   , то 
     (  Q  ,  R  )   :  =   деление  (  -  N  ,   D  ) 
     если   R   =   0   , то   возврат   (  -  Q  ,   0  ) 
     иначе   возврат   (  -  Q   -   1  ,   D   -   R  )   end 
   end 
   -- В этот момент N ≥ 0 и D > 0 
   возвращают   div_unsigned  (  N  ,   D  ) 
 end   
 функция   div_unsigned  (  N  ,   D  ) 
   Q   :  =   0  ;    R   :  =   N 
   в то время как   R    D   do 
     Q   :  =   Q   +   1 
     R   :  =   R    D 
   end 
   return   (  Q  ,   R  ) 
 end 

Эта процедура всегда дает R ≥ 0. Хотя она очень проста, она требует шагов Ω(Q) и поэтому экспоненциально медленнее, чем даже алгоритмы медленного деления, такие как деление в столбик. Это полезно, если известно, что Q невелик (будучи чувствительным к выходным данным алгоритмом ) и может служить в качестве исполняемой спецификации.

Длинное деление [ править ]

Деление в столбик — это стандартный алгоритм, используемый для ручного деления многозначных чисел, выраженных в десятичной системе счисления. Он постепенно перемещается от левого конца делимого к правому, вычитая максимально возможное кратное делителя (на уровне цифр) на каждом этапе; кратные затем становятся цифрами частного, а конечная разность становится остатком.

При использовании с двоичной системой счисления этот метод формирует основу для (беззнакового) целочисленного деления с остатком, приведенного ниже алгоритма. Короткое деление — это сокращенная форма длинного деления, подходящая для однозначных делителей. Разбиение на части , также известное как метод частичных частных или метод палача, представляет собой менее эффективную форму деления столбиком, которую, возможно, легче понять. Позволяя вычитать больше кратных, чем то, что имеется в настоящее время на каждом этапе, можно также разработать более свободный вариант деления в столбик.

Целочисленное деление (без знака) с остатком [ править ]

Следующий алгоритм, двоичная версия знаменитого деления столбиком , разделит N на D , помещая частное в Q а остаток в R. , В следующем псевдокоде все значения рассматриваются как целые числа без знака.

if   D   =   0   then   error  (  DivisionByZeroException  )   end 
 Q   :  =   0                    -- Инициализировать частное и остаток равным нулю 
 R   :  =   0                      
 for   i   :  =   n    1   ..   0   do    -- Где n — количество битов в N 
   R   :  =   R   <<   1             -- Сдвиг R влево на 1 бит 
   R  (  0  )   :  =   N  (  i  )            -- Установить младший бит R равным биту i числителя, 
   если   R    D   , то 
     R   :  =   R    D 
     Q  (  я  )   :  =   1 
   конец 
 конец 

Пример [ править ]

Если взять N=1100 2 (12 10 ) и D=100 2 (4 10 )

Шаг 1 : Установите R=0 и Q=0.
Шаг 2. Возьмите i=3 (на один меньше, чем количество битов в N).
Шаг 3 : R=00 (сдвиг влево на 1)
Шаг 4 : R=01 (установка R(0) на N(i))
Шаг 5 : R < D, поэтому пропустите оператор

Шаг 2 : Установите i=2
Шаг 3 : R=010
Шаг 4 : R=011
Шаг 5 : R < D, оператор пропускается

Шаг 2 : Установите i=1
Шаг 3 : R=0110
Шаг 4 : R=0110
Шаг 5 : R>=D, введено утверждение
Шаг 5b : R=10 (R-D)
Шаг 5c : Q=10 (установка Q(i) на 1)

Шаг 2 : Установите i=0
Шаг 3 : R=100
Шаг 4 : R=100
Шаг 5 : R>=D, введено утверждение
Шаг 5b : R=0 (R-D)
Шаг 5c : Q=11 (установка Q(i) на 1)

конец
Q=11 2 (3 10 ) и R=0.

Методы медленного деления [ править ]

Все методы медленного деления основаны на стандартном рекуррентном уравнении. [2]

где:

  • R j j -й частичный остаток от деления
  • B система счисления (основание, обычно 2 внутри компьютеров и калькуляторов)
  • q n − ( j + 1) — цифра частного в позиции n − ( j +1), где позиции цифр пронумерованы от наименее значимого 0 до наиболее значимого n −1.
  • n — количество цифр в частном
  • D - делитель

Восстановление подразделения [ править ]

Восстанавливающее деление работает с дробными числами с фиксированной точкой и зависит от предположения 0 < D < N . [ нужна цитата ]

Частные цифры q формируются из набора цифр {0,1}.

Основной алгоритм восстановления двоичного (основания 2) деления:

R   :  =   N 
 D   :  =   D   <<   n              -- R и D требуют двойной ширины слова N и Q 
 для   i   :  =   n    1   ..   0   do    -- Например 31..0 для 32 битов 
   R   :  =   2   *   R    D            — Пробное вычитание из сдвинутого значения (умножение на 2 — это сдвиг в двоичном представлении), 
   если   R   >=   0   , то 
     q  (  i  )   :  =   1            — Бит результата 1 
   else 
     q  (  i  )   :  =   0            -- Бит результата 0 
     R   :  =   R   +   D           -- Новый частичный остаток представляет собой (восстановленный) сдвинутый конец значения 
   -- 
 Где 

 : N = числитель, D = знаменатель, n = #биты, R = частичный остаток, q(i ) = бит #i частного 

Неработающее восстанавливающее деление похоже на восстанавливающее деление, за исключением того, что значение 2R сохраняется, поэтому D не нужно добавлять обратно в случае R < 0.

Невосстанавливающееся деление [ править ]

Деление без восстановления использует набор цифр {-1, 1} для цифр частного вместо {0, 1}. Алгоритм более сложен, но при аппаратной реализации имеет то преимущество, что для каждого бита частного требуется только одно решение и сложение/вычитание; после вычитания нет этапа восстановления, [3] что потенциально сокращает количество операций почти вдвое и позволяет выполнять их быстрее. [4] Основной алгоритм двоичного (основание 2) невосстанавливающегося деления неотрицательных чисел:

R   :  =   N 
 D   :  =   D   <<   n              -- R и D требуется удвоенная ширина слова N и Q 
 для   i   =   n    1   ..   0   do    -- например 31..0 для 32 бит, 
   если   R   >=   0   then 
     q  (  i  )   :  =   +  1 
     R   :  =   2   *   R    D 
   else 
     q  (  i  )   :  =   1 
     R   :  =   2   *   R   +   D 
   end   if 
 end 
 
 -- Примечание: N=числитель, D=знаменатель, n=#бит, R=частичный остаток, q(i)=бит #i частного. 

Следуя этому алгоритму, частное имеет нестандартную форму, состоящую из цифр -1 и +1. Эту форму необходимо преобразовать в двоичную, чтобы получить окончательное частное. Пример:

Преобразуйте следующее частное в набор цифр {0,1}:
Начинать:
1. Образуйте положительный член:
2. Замаскируйте отрицательный термин*:
3. Вычтите: :
*.(Знаковая двоичная запись с дополнением до единиц без дополнения до двух )

Если -1 цифры хранятся как нули (0), как обычно, тогда является и вычисления тривиально: выполнить дополнение единиц (побитовое дополнение) к оригиналу .

Q   :  =   Q   -   бит  .   bnot  (  Q  )        — подходит, если цифры −1 в Q представлены как нули, как это обычно бывает. 

Наконец, частные, вычисленные этим алгоритмом, всегда нечетны, а остаток в R находится в диапазоне −D ≤ R <D. Например, 5/2 = 3 R −1. Чтобы преобразовать в положительный остаток, выполните один шаг восстановления после преобразования Q из нестандартной формы в стандартную:

если   R   <   0   , то 
   Q   :  =   Q    1 
   R   :  =   R   +   D    — требуется только в том случае, если остаток представляет интерес. 
  конец   , если 

Фактический остаток равен R >> n. (Как и при восстановлении деления, младшие биты R используются с той же скоростью, что и биты частного Q, и для обоих обычно используется один сдвиговый регистр.)

Отдел СТО [ править ]

Деление SRT — популярный метод деления во многих реализациях микропроцессоров . [5] [6] Алгоритм назван в честь Д. У. Суини из IBM , Джеймса Э. Робертсона из Университета Иллинойса и К. Д. Точера из Имперского колледжа Лондона . Все они разработали алгоритм независимо друг от друга примерно в одно и то же время (опубликовано в феврале 1957 г., сентябре 1958 г. и январе 1958 г. соответственно). [7] [8] [9]

Деление SRT похоже на деление без восстановления, но оно использует справочную таблицу на основе делимого и делителя для определения каждой цифры частного.

Наиболее существенное отличие состоит в том, что избыточное представление для частного используется . Например, при реализации деления SRT по основанию 4 каждая цифра частного выбирается из пяти возможностей: { −2, −1, 0, +1, +2 }. По этой причине выбор цифры частного не обязательно должен быть идеальным; более поздние цифры частного могут исправить небольшие ошибки. (Например, пары цифр частного (0, +2) и (1, −2) эквивалентны, поскольку 0×4+2 = 1×4–2.) Этот допуск позволяет выбирать цифры частного, используя только несколько наиболее значимые биты делимого и делителя, вместо того, чтобы требовать вычитания полной ширины. Это упрощение, в свою очередь, позволяет использовать систему счисления больше 2.

Как и при делении без восстановления, заключительные шаги представляют собой окончательное вычитание полной ширины для разрешения последнего бита частного и преобразование частного в стандартную двоичную форму.

Intel Pentium в процессоре Печально известная ошибка деления чисел с плавающей запятой была вызвана неправильно закодированной справочной таблицей. Пять из 1066 записей были ошибочно пропущены. [10] [11]

Методы быстрого деления [ править ]

Разделение Ньютона-Рафсона [ править ]

Ньютон-Рафсон использует метод Ньютона, чтобы найти обратную величину . и умножьте это обратное значение на найти последнее частное .

Этапы разделения Ньютона-Рафсона:

  1. Рассчитать смету для взаимного делителя .
  2. Вычисляйте последовательно более точные оценки взаимного. Именно здесь используется метод Ньютона-Рафсона как таковой.
  3. Вычислите частное, умножив делимое на обратную величину делителя: .

Чтобы применить метод Ньютона для нахождения обратной величины , необходимо найти функцию у которого есть ноль в . Очевидная такая функция , но итерация Ньютона-Рафсона для этого бесполезна, поскольку ее нельзя вычислить, не зная обратного значения (более того, он пытается вычислить точную обратную величину за один шаг, а не допускает итеративные улучшения). Функция, которая работает, это , для которого итерация Ньютона–Рафсона дает

который можно вычислить из используя только умножение и вычитание или используя два слитых умножения и сложения .

С вычислительной точки зрения выражения и не эквивалентны. Чтобы получить результат с точностью до 2 n бит при использовании второго выражения, необходимо вычислить произведение между и с двойной заданной точностью ( n бит). [ нужна цитата ] Напротив, продукт между и необходимо вычислять только с точностью до n бит, поскольку первые n бит (после двоичной точки) являются нулями.

Если ошибка определяется как , затем:

Возведение в квадрат ошибки на каждом шаге итерации – так называемая квадратичная сходимость метода Ньютона–Рафсона – приводит к тому, что количество правильных цифр в результате примерно удваивается для каждой итерации . Это свойство становится чрезвычайно ценным, когда задействованные числа иметь много цифр (например, в большой целочисленной области). Но это также означает, что первоначальная сходимость метода может быть сравнительно медленной, особенно если первоначальная оценка выбран неудачно.

Для подзадачи выбора начальной оценки , удобно применить побитовый сдвиг к делителю D, чтобы масштабировать его так, чтобы 0,5 ≤ D ≤ 1; применяя тот же битовый сдвиг к числителю N , можно гарантировать, что частное не изменится. Тогда можно было бы использовать линейное приближение в виде

для инициализации Ньютона-Рафсона. Минимизировать максимум абсолютного значения ошибки данного приближения на интервале , следует использовать

Коэффициенты линейного приближения определяются следующим образом. Абсолютное значение ошибки . Минимум максимального абсолютного значения погрешности определяется теоремой Чебышева об эквиколебаниях , примененной к . Локальный минимум происходит, когда , которое имеет решение . Функция в этом минимуме должна иметь противоположный знак, что и функция в конечных точках, а именно: . Два уравнения с двумя неизвестными имеют единственное решение и , а максимальная ошибка равна . При использовании этого приближения абсолютная величина ошибки начального значения меньше

Можно сгенерировать полиномиальную аппроксимацию степени больше 1, вычисляя коэффициенты с помощью алгоритма Ремеза . Компромисс заключается в том, что первоначальное предположение требует большего количества вычислительных циклов, но, будем надеяться, в обмен на меньшее количество итераций Ньютона-Рафсона.

Поскольку для этого метода сходимость в точности квадратичная, отсюда следует, что

шагов достаточно, чтобы вычислить значение до бинарные места. Это значение равно 3 для форматов одинарной точности IEEE и 4 для форматов двойной точности и расширенного формата двойной точности .

Псевдокод [ править ]

Следующее вычисляет частное N и D с точностью до P двоичных разрядов:

Выразите D как M × 2 Это где 1 ≤ M < 2 (стандартное представление с плавающей запятой)
 Д' := Д/2 е+1    // масштаб от 0,5 до 1, может быть выполнен с помощью битового сдвига/вычитания показателя степени 
  Н' := Н/2 е+1 
X := 48/17 − 32/17 × D'  // предварительно вычисляем константы с той же точностью, что и 
 повторение D   раз     // можно предварительно вычислить на основе фиксированного P 
      X := X + X × (1 - D' × X) 
  конец 
 возврата  N' × X 
 

Например, для деления с плавающей запятой двойной точности этот метод использует 10 умножений, 9 сложений и 2 сдвига.

Ньютона- Вариант разделения Рафсона

Метод деления Ньютона-Рафсона можно изменить, чтобы он стал немного быстрее, следующим образом. После сдвига N и D так, чтобы D находился в [0,5, 1,0], инициализируйте с помощью

Это наилучшее квадратичное приближение к 1/ D , которое дает абсолютное значение ошибки меньше или равное 1/99. Ошибка выбрана так, чтобы ошибка была равна перемасштабированному полиному Чебышева третьего порядка первого рода. Коэффициенты должны быть заранее рассчитаны и жестко закодированы.

Затем в цикле используйте итерацию, которая кубизирует ошибку.

Термин Y E является новым.

Если цикл выполняется до тех пор, пока X не согласуется с 1/ D на своих ведущих битах P , то количество итераций будет не более

сколько раз 99 нужно возложить в куб, чтобы получить 2 П +1 . Затем

это частное к P битам.

Использование полиномов более высокой степени при инициализации или итерации приводит к снижению производительности, поскольку необходимые дополнительные умножения лучше потратить на выполнение большего количества итераций.

Подразделение Гольдшмидта [ править ]

Гольдшмидтское подразделение [12] (по мотивам Роберта Эллиота Гольдшмидта) [13] использует итерационный процесс многократного умножения делимого и делителя на общий коэффициент F i , выбранный так, чтобы делитель сходился к 1. Это заставляет делимое сходиться к искомому частному Q :

Шаги подразделения Гольдшмидта:

  1. Сгенерируйте оценку для коэффициента умножения F i .
  2. Умножьте делимое и делитель на F i .
  3. Если делитель достаточно близок к 1, верните делимое, в противном случае перейдите к шагу 1.

Предполагая, что N / D масштабировано так, что 0 < D <1, каждый F i основан на D :

Умножение дивиденда и делителя на коэффициент дает:

После достаточного числа k итераций .

Метод Гольдшмидта используется в процессорах AMD Athlon и более поздних моделях. [14] [15] Он также известен как алгоритм Андерсона Эрла Голдшмидта Пауэрса (AEGP) и реализуется различными процессорами IBM. [16] [17] Хотя он сходится с той же скоростью, что и реализация Ньютона-Рафсона, одним из преимуществ метода Гольдшмидта является то, что умножения в числителе и знаменателе могут выполняться параллельно. [17]

Биномиальная теорема

Метод Гольдшмидта можно использовать с факторами, допускающими упрощения по биномиальной теореме . Предполагать был масштабирован в степени двойки так, что . Мы выбираем и . Это дает

.

Через n шагов , знаменатель можно округлить до 1 с относительной погрешностью

что является максимальным при когда , что обеспечивает минимальную точность двоичные цифры.

Методы больших целых чисел [ править ]

Методы, предназначенные для аппаратной реализации, обычно не масштабируются до целых чисел с тысячами или миллионами десятичных цифр; они часто возникают, например, при модульном сокращении криптографии . Для этих больших целых чисел более эффективные алгоритмы деления преобразуют задачу, используя небольшое количество умножений, что затем можно выполнить с помощью асимптотически эффективного алгоритма умножения , такого как алгоритм Карацубы , умножение Тума-Кука или алгоритм Шёнхаге-Штрассена . В результате вычислительная сложность деления имеет тот же порядок (с точностью до мультипликативной константы), что и умножение. Примеры включают приведение к умножению методом Ньютона , как описано выше , [18] а также немного более быстрая дивизия Бурникеля-Циглера , [19] редукции Барретта и редукции Монтгомери . Алгоритмы [20] [ нужна проверка ] Метод Ньютона особенно эффективен в сценариях, где необходимо многократно делить на один и тот же делитель, поскольку после первоначального обращения Ньютона для каждого деления требуется только одно (усеченное) умножение.

Деление на константу [ править ]

Деление на константу D эквивалентно умножению на обратную величину . Поскольку знаменатель постоянен, то и его обратная величина (1/ D ) постоянна. Таким образом, можно вычислить значение (1/ D ) один раз во время компиляции, а во время выполнения выполнить умножение N ·(1/ D ), а не деление N/D . В арифметике с плавающей запятой использование (1/ D ) не представляет особых проблем. [а] но в целочисленной арифметике обратная величина всегда будет равна нулю (при условии | D | > 1).

) не обязательно Специально использовать (1/ D ; любое значение ( X / Y ), которое уменьшается до (1/ D может использоваться ). Например, для деления на 3 можно использовать коэффициенты 1/3, 2/6, 3/9 или 194/582. Следовательно, если бы Y было степенью двойки, шаг деления свелся бы к быстрому сдвигу битов вправо. Эффект вычисления N / D как ( N · X )/ Y заменяет деление на умножение и сдвиг. Обратите внимание, что круглые скобки важны, поскольку N ·( X / Y ) будет иметь значение ноль.

Однако, если D само по себе не является степенью двойки, не существует X и Y , удовлетворяющих вышеуказанным условиям. К счастью, ( N · X )/ Y дает точно такой же результат, как N / D в целочисленной арифметике, даже когда ( X / Y ) не совсем равно 1/ D , но «достаточно близко», чтобы ошибка, вносимая аппроксимацией, составляла в битах, которые отбрасываются в результате операции сдвига. [21] [22] [23] Сокращение Барретта использует степени 2 для значения Y , чтобы сделать деление на Y простым сдвигом вправо. [б]

В качестве конкретного примера арифметики с фиксированной запятой для 32-битных целых чисел без знака деление на 3 можно заменить умножением на 2863311531 / 2 33 , умножение на 2863311531 ( шестнадцатеричное 0xAAAAAAAB), за которым следует сдвиг вправо на 33 бита. Значение 2863311531 рассчитывается как 2 33 / 3 , затем округляем в большую сторону. Аналогично, деление на 10 можно выразить как умножение на 3435973837 (0xCCCCCCCD) с последующим делением на 2. 35 (или сдвиг вправо на 35 бит). [25] : стр.230-234 OEIS предоставляет последовательности констант для умножения как A346495 и для сдвига вправо как A346496 .

Для общего деления x -битных беззнаковых целых чисел, где делитель D не является степенью 2, следующее тождество преобразует деление в два x -битных сложения/вычитания, умножение одного x -бита на x -бит (где только верхняя половина результат используется) и несколько смен, после предварительного расчета и :

В некоторых случаях деление на константу можно осуществить еще за меньшее время, превратив операцию «умножение на константу» в серию сдвигов и сложений или вычитаний . [26] Особый интерес представляет деление на 10, для которого получается точное частное с остатком, если необходимо. [27]

Ошибка округления [ править ]

Ошибка округления может быть внесена операциями деления из-за ограниченной точности .

См. также [ править ]

Примечания [ править ]

  1. ^ Несмотря на то, насколько «небольшую» проблему вызывает оптимизация, эта взаимная оптимизация все еще обычно скрывается за флагом «быстрой математики» в современных компиляторах , поскольку она неточна.
  2. ^ Современные компиляторы обычно выполняют эту оптимизацию целочисленного умножения и сдвига; однако для константы, известной только во время выполнения, программа должна сама реализовать оптимизацию. [24]

Ссылки [ править ]

  1. ^ Родехеффер, Томас Л. (26 августа 2008 г.). Software Integer Division (PDF) (Технический отчет). Microsoft Research, Кремниевая долина.
  2. ^ Моррис, Джеймс Э.; Иневский, Кшиштоф (22 ноября 2017 г.). Справочник по применению наноэлектронных устройств . ЦРК Пресс. ISBN  978-1-351-83197-0 .
  3. ^ Шоу, Роберт Ф. (1950). «Арифметические операции в двоичной машине» . Обзор научных инструментов . 21 (8): 690. Бибкод : 1950RScI...21..687S . дои : 10.1063/1.1745692 . ISSN   0034-6748 . Архивировано из оригинала 28 февраля 2022 г. Проверено 28 февраля 2022 г.
  4. ^ Флинн. «Stanford EE486 (Отдел продвинутой компьютерной арифметики) - Раздаточный материал главы 5 (Отдел)» (PDF) . Стэндфордский Университет . Архивировано (PDF) из оригинала 18 апреля 2022 г. Проверено 24 июня 2019 г.
  5. ^ Харрис, Дэвид Л.; Оберман, Стюарт Ф.; Горовиц, Марк А. (9 сентября 1998 г.). Отдел SRT: Архитектура, модели и реализации (PDF) (Технический отчет). Стэндфордский Университет. Архивировано (PDF) из оригинала 24 декабря 2016 года . Проверено 23 декабря 2016 г.
  6. ^ Макканн, Марк; Пиппенджер, Николас (2005). «Алгоритмы разделения СТО как динамические системы» . SIAM Journal по вычислительной технике . 34 (6): 1279–1301. CiteSeerX   10.1.1.72.6993 . дои : 10.1137/S009753970444106X . Архивировано из оригинала 24 августа 2022 г. Проверено 24 августа 2022 г.
  7. ^ Кок, Джон; Суини, Д.В. (11 февраля 1957 г.), Высокоскоростная арифметика в параллельном устройстве (Company Memo), IBM, стр. 20, заархивировано из оригинала 24 августа 2022 года , получено 24 августа 2022 года. {{citation}}: CS1 maint: отсутствует местоположение издателя ( ссылка )
  8. ^ Робертсон, Джеймс (1 сентября 1958 г.). «Новый класс методов цифрового деления» . IRE-транзакции на электронных компьютерах . ИС-7 (3). ИИЭР: 218–222. дои : 10.1109/TEC.1958.5222579 . hdl : 2027/uiuo.ark:/13960/t0gt7529c . Архивировано из оригинала 24 августа 2022 г. Проверено 24 августа 2022 г.
  9. ^ Точер, К.Д. (1 января 1958 г.). «Техника умножения и деления для автоматических двоичных компьютеров» . Ежеквартальный журнал механики и прикладной математики . 11 (3): 364–384. дои : 10.1093/qjmam/11.3.364 . Архивировано из оригинала 24 августа 2022 г. Проверено 24 августа 2022 г.
  10. ^ «Статистический анализ ошибок с плавающей запятой» . Корпорация Интел. 1994. Архивировано из оригинала 23 октября 2013 года . Проверено 22 октября 2013 г.
  11. ^ Оберман, Стюарт Ф.; Флинн, Майкл Дж. (июль 1995 г.). Анализ алгоритмов и реализаций разделения (PDF) (Технический отчет). Стэндфордский Университет. CSL-TR-95-675. Архивировано (PDF) из оригинала 17 мая 2017 г. Проверено 23 декабря 2016 г.
  12. ^ Гольдшмидт, Роберт Э. (1964). Применение деления по сходимости (PDF) (Диссертация). Магистр наук диссертация. MIT OCLC   34136725 . Архивировано (PDF) из оригинала 10 декабря 2015 г. Проверено 15 сентября 2015 г.
  13. ^ "Авторы" . Журнал исследований и разработок IBM . 11 : 125–127. 1967. дои : 10.1147/рд.111.0125 . Архивировано из оригинала 18 июля 2018 года.
  14. ^ Оберман, Стюарт Ф. (1999). «Алгоритмы деления с плавающей запятой и квадратного корня и их реализация в AMD-K7». ТМ Микропроцессор» (PDF) . Материалы 14-го симпозиума IEEE по компьютерной арифметике (кат. № 99CB36336) . стр. 106–115. doi : 10.1109/ARITH.1999.762835 . ISBN  0-7695-0116-8 . S2CID   12793819 . Архивировано (PDF) из оригинала 29 ноября 2015 г. Проверено 15 сентября 2015 г.
  15. ^ Содерквист, Питер; Лизер, Мириам (июль – август 1997 г.). «Деление и квадратный корень: выбор правильной реализации» . IEEE микро . 17 (4): 56–66. дои : 10.1109/40.612224 .
  16. ^ С.Ф. Андерсон, Дж.Г. Эрл, Р.Е. Гольдшмидт, Д.М. Пауэрс. IBM 360/370 model 91: исполнительный блок с плавающей запятой , IBM Journal of Research and Development , январь 1997 г.
  17. ^ Перейти обратно: а б Гай, Эвен; Питер, Зидель; Фергюсон, Уоррен (1 февраля 2005 г.). «Параметрический анализ ошибок алгоритма деления Гольдшмидта» . Журнал компьютерных и системных наук . 70 (1): 118–139. дои : 10.1016/j.jcss.2004.08.004 .
  18. ^ Хассельстрем, Карл (2003). Быстрое деление больших целых чисел: сравнение алгоритмов (PDF) (диссертация на степень магистра компьютерных наук). Королевский технологический институт. Архивировано из оригинала (PDF) 8 июля 2017 года . Проверено 8 июля 2017 г.
  19. ^ Иоахим Циглер, Кристоф Бурникель (1998), Отдел быстрой рекурсии , Институт компьютерных наук Макса Планка, заархивировано из оригинала 26 апреля 2011 г. , получено 10 сентября 2021 г. {{citation}}: CS1 maint: отсутствует местоположение издателя ( ссылка )
  20. ^ Барретт, Пол (1987). «Реализация алгоритма шифрования с открытым ключом Ривеста Шамира и Адлемана на стандартном процессоре цифровых сигналов» . Труды о достижениях в криптологии --- CRYPTO '86 . Лондон, Великобритания: Springer-Verlag. стр. 311–323. ISBN  0-387-18047-8 .
  21. ^ Гранлунд, Торбьёрн; Монтгомери, Питер Л. (июнь 1994 г.). «Деление на инвариантные целые числа с использованием умножения» (PDF) . Уведомления SIGPLAN . 29 (6): 61–72. CiteSeerX   10.1.1.1.2556 . дои : 10.1145/773473.178249 . Архивировано (PDF) из оригинала 6 июня 2019 г. Проверено 8 декабря 2015 г.
  22. ^ Мёллер, Нильс; Гранлунд, Торбьёрн (февраль 2011 г.). «Улучшенное деление инвариантными целыми числами» (PDF) . Транзакции IEEE на компьютерах . 60 (2): 165–175. дои : 10.1109/TC.2010.143 . S2CID   13347152 . Архивировано (PDF) из оригинала 22 декабря 2015 г. Проверено 8 декабря 2015 г.
  23. ^ смешная_рыба. «Труд разделения (Эпизод III): более быстрое деление без знака константами». Архивировано 8 января 2022 г. в Wayback Machine . 2011.
  24. ^ смешная_рыба. «libdivide, оптимизированное целочисленное деление» . Архивировано из оригинала 23 ноября 2021 года . Проверено 6 июля 2021 г.
  25. ^ Уоррен младший, Генри С. (2013). Хакерское наслаждение (2-е изд.). Аддисон Уэсли - Pearson Education, Inc. ISBN  978-0-321-84268-8 .
  26. ^ ЛаБудд, Роберт А.; Головченко, Николай; Ньютон, Джеймс; и Паркер, Дэвид; Massmind: «Двоичное деление на константу». Архивировано 9 января 2022 г. на Wayback Machine.
  27. ^ Гласные, РА (1992). «Деление на 10». Австралийский компьютерный журнал . 24 (3): 81–85.

Дальнейшее чтение [ править ]

Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: 21EB13A7E6C859B50E4AD558DDE5651C__1715313780
URL1:https://en.wikipedia.org/wiki/Division_algorithm
Заголовок, (Title) документа по адресу, URL1:
Division algorithm - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)