Как происходит деление внутри цифровых компьютеров? Какой алгоритм для этого?
Я много искал в Google, но не получил удовлетворительных результатов. Пожалуйста, предоставьте очень четкий алгоритм / блок-схему алгоритма деления с примером иллюстрации.
computers
tutorial
arithmetic-division
Программа-о-стив
источник
источник
Ответы:
Алгоритмы деления в цифровых разработках можно разделить на две основные категории. Медленное деление и быстрое деление.
Я предлагаю вам прочитать о том, как работают двоичное сложение и вычитание, если вы еще не знакомы с этими понятиями.
Медленное деление
Все самые простые медленные методы работают следующим образом: вычтите знаменатель из числителя. Делайте это рекурсивно с результатом каждого вычитания, пока остаток не станет меньше знаменателя. Количество итераций - это целое число, а оставшееся количество - это остаток.
Пример:
7/3:
Таким образом, ответ 2 с остатком 1. Чтобы сделать этот ответ немного более актуальным, вот некоторые предыстории. Выполняется двоичное вычитание путем сложения отрицательных значений, например: 7 - 3 = 7 + (-3). Это достигается с помощью дополнения до двух. Каждое двоичное число добавляется с использованием серии полных сумматоров:
Где каждый 1-битный полный сумматор реализован следующим образом:
Быстрое деление
Хотя более медленный метод деления легко понять, он требует повторяющихся итераций. Существуют различные «быстрые» алгоритмы, но все они полагаются на оценку.
Рассмотрим метод Гольдшмидта:
Я воспользуюсь следующим:Q = ND
Этот метод работает следующим образом:
Этот метод использует двоичное умножение с помощью итеративного сложения, которое также используется в современных процессорах AMD.
источник
Аппаратное обеспечение для деления с плавающей запятой является частью логического блока, который также выполняет умножение; имеется аппаратный модуль умножителя. Числа с плавающей точкой, скажем, A и B, делятся (образуя A / B) на
мантиссы (двоичные цифры чисел) являются двоичными числами с фиксированной запятой между 1/2 и 1; это означает, что первая цифра после двоичной точки - «1», за которой следуют нули и единицы ... в качестве первого шага таблица поиска находит обратную величину с точностью до шести бит (есть только 32 возможности, это небольшая таблица)
Интересно, что старая ошибка деления Pentium (очень достойная публикации в 1994 году) была вызвана ошибкой печати, которая приводила к ошибочным значениям обратной таблицы для шага (4). Ранняя статья «Метод деления с использованием параллельного множителя», Domenico Ferrari, IEEE Trans. Электрон. Вычи. В EC-16 / 224-228 (1967) описывается метод, а также в документе "IBM System / 360 Model 91: модуль выполнения с плавающей запятой" IBM J. Res. Девиация 11 : 34-53 (1967).
источник
Существуют очень разные методы деления в зависимости от числа, которое будет обработано. Для целых чисел метод сдвига и вычитания, данный другими, будет работать нормально. Для чисел с плавающей запятой, однако, может быть быстрее сначала вычислить обратную величину знаменателя, а затем умножить это число на числитель.
Вычисление обратного знаменателя не так уж плохо; это делается путем уточнения последовательных приближений. Пусть g будет вашим предположением для 1 / d. Для лучшего предположения используйте g '= g (2-й б). Это сходится квадратично, поэтому вы удваиваете цифры точности при каждом улучшении.
Пример: вычисление обратной величины 3.5.
Ваше первоначальное предположение 0,3. Вы вычисляете 0,3 * 3,5 = 1,15. Ваше скорректированное предположение составляет 0,3 * (2 - 1,15) = 0,285. Уже довольно близко! Повторите процесс, и вы получите 0,2857125, а третья попытка получит 0,2857142857.
Есть несколько ярлыков. В плавающей запятой вы можете извлечь степени десяти или степени двух, в зависимости от числовой базы вашей машины. И для скорости за счет большего использования памяти вы можете использовать предварительно вычисленную таблицу для чисел в диапазоне от 1 до b (где b - ваша числовая база), чтобы получить предположение, которое непосредственно близко к требуемой обратной величине и сохранить один или два шага уточнения.
Имейте в виду, что, как и в случае умножения и смущения Колмогорова в 1960 году его учеником Анатолием Карацубой, вы никогда не знаете, когда будет найден более быстрый или лучший метод. Никогда не отказывайся от своего любопытства.
источник
Компьютеры не делают итеративное сложение для умножения чисел - это будет очень медленно. Вместо этого есть несколько быстрых алгоритмов умножения. Проверьте: http://en.wikipedia.org/wiki/Karatsuba_algorithm
источник