русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Извлечение квадратного корня


Дата добавления: 2014-11-27; просмотров: 2681; Нарушение авторских прав


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

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

В общем случае извлечение квадратного корня из числа, представленного с плавающей запятой, осуществляется в два этапа. На первом этапе формируется порядок результата, а на втором – мантисса.

Для определения порядка результата порядок исходного операнда следует разделить на 2. Если порядок подкоренного числа четный, то деление на 2 выполняется путем сдвига его кода вправо на один двоичный разряд (отрицательный порядок должен быть представлен инверсным кодом). Если порядок нечетный, то перед делением на 2 его значение следует увеличить на единицу, что повлечет за собой необходимость денормализовать мантиссу. Таким образом, при нечетном порядке к его значению в первом такте прибавляют 1, а во втором такте одновременно сдвигают мантиссу и увеличенное значение порядка на один разряд вправо. При четном или нечетном порядке операнда результат выполнения операции все равно будет получаться нормализованным.

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

Рассмотрим сначала метод извлечения квадратного корня с восстановлением остатка.



Для получения цифр корня следует выполнить циклов, каждый из которых распадается на три такта. В первом такте из содержимого сумматора, т.е. из очередного частичного остатка, вычитается делитель, сформированный из уже полученных цифр частного и приписки «01». Очевидно, что в первом цикле делитель представляет собой число «0,01». Во втором такте в случае отрицательного сумматора требуется процедура восстановления остатка путем прибавления к сумматору положительного делителя. В третьем такте формируется очередная (начиная со старшей) цифра корня, равная нулю, если в первом такте сумматор оказался отрицательным, или единице, если в первом такте сумматор оказался положительным. В этом же такте выполняется сдвиг очередного частичного остатка на один разряд влево. По окончании выполнения операции производится округление результата.

Пример.

 

1. Определение порядка результата.

PB = PA/2:

Таким образом, порядок результата PB = 0,010.

 

2. Определение мантиссы.

1. -

2. -

+

3. -

4. -

+

(окончание примера на следующей странице)

5. -

+

6. -

+

 

Окр.

 

Окончательно

 

Извлечение квадратного корня без восстановления остатка является модификацией предыдущего алгоритма. В каждом цикле выполняются два такта. В первом такте в зависимости от знака сумматора выполняется арифметическая операция. Если сумматор положительный, то из него вычитается делитель. Если сумматор отрицательный, то, наоборот, к нему прибавляется положительный делитель. Во втором такте анализируется знак очередного остатка. Если остаток положительный, то очередная цифра частного – единица и приписка к частному для формирования делителя «01». В противном случае очередная цифра частного – нуль и приписка к частному для формирования делителя «11». Одновременно с формированием частного и переменного делителя выполняется удвоение очередного частичного остатка. При этом знаковый разряд может быть искажен, поэтому для сохранения знака следует использовать модифицированный код.

 

Пример.

Рассмотрим число из предыдущего примера.

 

1. -

(окончание примера на следующей странице)

2. -

3. +

4. -

5. +

6. +

 

Окр.

Окончательно

2.7. Выполнение арифметических операций
в D-кодах

О представлении чисел двоично-десятичными кодами см. в разделах 1.1 и 1.5.

 



<== предыдущая лекция | следующая лекция ==>
Деление дополнительных кодов чисел | Сложение в D-кодах


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.007 сек.