рефераты Знание — сила. Библиотека научных работ.
~ Портал библиофилов и любителей литературы ~

Меню
Поиск



бесплатно рефератыВиконання операцій множення і ділення у двійковій системі числення

Існує ряд методів множення, що засновані на додаванні груп часткових добутків з наступним об'єднанням сум разом з перенесеннями для одержання добутку. Наприклад, часткові добутки групуються по три і додаються із запам'ятовуванням перенесень за допомогою ланцюжка суматорів На кінці ланцюжка здійснюється додавання з розповсюдженням перенесень. Така роздільна обробка проміжних сум і перенесень вимагає так називаного "дерева суматорів" (рис. 3.7).

Реалізація матричних методів виконання операції множення вимагає більшої кількості апаратури, ніж методів послідовного аналізу розрядів або груп розрядів множника, і дає більший виграш у часі. Однак у зв'язку зі значним розвитком мікроелектроніки обмеження щодо кількості апаратури стають усе менш суворими, тому матричні методи широко застосовують на практиці.

Рис. 3.7. Дерево суматорів

3.4. МНОЖЕННЯ ЧИСЕЛ З ПЛАВАЮЧОЮ КОМОЮ

Для чисел і , що представлені в формі з плаваючою комою, добуток обчислюється за формулою:

,

де , .

Звідси випливає, що процес множення складається з чотирьох етапів:

множення мантис;

додавання порядків;

нормалізація й округлення мантиси добутку;

корегування порядку добутку.

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

У загальному випадку результат множення мантис може бути одержаний в ненормалізованій формі. Причому порушення нормалізації можливо тільки зліва. Воно усувається шляхом зсуву коду мантиси на один розряд вліво і, відповідно, корегується порядок добутку шляхом віднімання одиниці від суми порядків. Округлення мантиси здійснюється додаванням одиниці до (п+1)-го розряду.

Під час виконання операції множення чисел з плаваючою комою можуть мати місце такі особливі випадки.

Якщо порядок результату є найбільшим від'ємним числом, то необхідно формувати машинний нуль.

Коли виникає переповнення додатного порядку і воно не усувається після нормалізації і корегування порядку, то необхідно формувати ознаку переповнення порядку.

Ці особливі випадки можна передбачити в алгоритмі операції множення введенням корегування добутку на підставі ознак результату.

3.5. МЕТОДИ ДІЛЕННЯ ЧИСЕЛ В ЦОМ

3.5.1. Основні уявлення про ділення чисел

Одним з найдавніших вважається давньоєгипетський спосіб ділення, що заснований на використанні операцій подвоєння і порівняння. Розглянемо його реалізацію на прикладі.

Приклад 3.15. Поділити число А = 1075 на число В = 25.

Розв'язання. Складаються два стовпчики. В лівому стовпчику розташовуються степені двійки, а у правому стовпчику перше число дорівнює В, а кожне наступне є подвоєним попереднім числом. Кожне число, що утворюється у правому стовпчику, порівнюють з діленим 1075. Як тільки буде утворено число 1600, яке більше за ділене 1075, то попереднє число лівого стовпчику, а саме, 32 помічається зірочкою. При цьому визначається різниця 1075 - 800 = 275, яка є остачею. Далі вона порівнюється з числами правого стовпчику у напряму, який вказує стрілка, до утворення чергової остачі. Результат ділення утворюється додаванням чисел лівого стовпчику, що помічені зірочками, тобто 32 + 8 + 2 + 1 = 43.

Ділення двійкових чисел багато в чому аналогічне діленню десяткових чисел. Процес ділення полягає в тому, що послідовно розряд за розрядом відшукуються цифри частки шляхом підбора з наступним множенням цієї цифри на дільник і відніманням цього добутку від діленого.

Існує багато різних методів виконання операції ділення, серед яких найвідоміші такі.

Насамперед це - "шкільний" алгоритм ділення, який полягає в тому, що дільник на кожному кроці віднімається стільки разів від діленого (починаючи зі старших розрядів), скільки це можливо для одержання найменшої додатної остачі. Тоді в черговий розряд частки записується цифра, яка дорівнює кількості дільників, що містяться в діленому на даному кроці. Таким чином, весь процес ділення зводиться до операцій віднімання і зсуву.

Інший метод виконання операції ділення полягає в множенні діленого на обернене значення дільника

.

Тут виникає нова операція - обчислення оберненого значення, що здійснюється за відомими наближеними формулами (наприклад, розкладанням у біноміальний ряд Ньютона і т.п.). У цьому випадку до складу команд машини повинна входити спеціальна операція для визначення оберненого числа.

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

Два останні методи, як правило, реалізуються за підпрограмами, що потребують значних витрат часу, тому вони придатні для використання тільки в спеціалізованих машинах, в програмах яких операція ділення чисел зустрічається досить рідко. В більшості сучасних ЦОМ є спеціальний операційний блок, який здійснює ділення чисел. В універсальних обчислювальних машинах, як правило, реалізується різновид "шкільного" алгоритму ділення.

3.5.2. Ділення чисел з фіксованою комою

Нехай А - ділене, В - дільник і С - частка. Найпростіше ділення виконується в прямому коді. У разі представлення чисел , і у формі з фіксованою комою, воно реалізується у два етапи. На першому етапі визначається знак частки шляхом додавання за модулем два цифр знакових розрядів діленого і дільника (див. табл. 3.1). На другому етапі здійснюється ділення модулів початкових чисел і , округлення модуля частки, після чого до нього дописується знак, що визначений на першому етапі.

На відміну від множення чисел з фіксованою комою, в процесі якого принципово неможливе переповнення розрядної сітки, ділення дробових чисел може призвести до переповнення розрядної сітки і, отже, до неправильного результату. Тому для уникнення такої ситуації має виконуватись умова: .

Відомо два основних метода ділення чисел, а саме: ділення з відновленням та без відновлення остач.

Алгоритм ділення модулів чисел з відновленням остач полягає у виконанні таких дій.

П. 1. Подвоїти модуль діленого .

П. 2. Відняти від подвоєного модуля діленого модуль дільника. Одержана різниця є першою остачею.

П. 3. Проаналізувати знак остачі R. Якщо , то черговому розряду частки присвоїти цифру 1 і перейти до п. 5; якщо ж R < 0, то черговому розряду частки присвоїти цифру 0.

П. 4. Відновити остачу, додавши модуль дільника .

П. 5. Подвоїти остачу.

П. 6. Визначити чергову остачу, віднявши від попередньої остачі модуль дільника. Перейти до п. 3.

П. 3 - п. 6 виконувати до одержання всіх необхідних цифр частки.

За своїм характером операція ділення відноситься до операцій, що дають не завжди точний результат, тому ознакою закінчення операції ділення може бути досягнення заданої точності. Якщо в процесі ділення одержується остача R = 0, то операція зупиняється й у решту розрядів частки записується нуль. Звичайно формальною ознакою кінця операції ділення є одержання такої самої кількості розрядів у частці, яку мають операнди.

Подвоєння діленого та остачі практично виконується шляхом зсуву коду вліво на один розряд.

Приклад 3.16. Поділити число А = - 0, 10100 на число В = 0, 11011, використовуючи метод ділення з відновленням остач.

Розв'язання. Для даних чисел маємо: =1; = 0, 10100; =0; = 0, 11011. Визначаємо знак частки: =10=1. Віднімання будемо виконувати як додавання доповняльних кодів, тому = 1,00101.

Усі дії, що виконуються в процесі ділення, наведені в табл. 3.18.

Відповідь: С= - 0, 10111.

З наведеного прикладу випливає, що цифри частки є інверсними значеннями знакових розрядів чергових остач. Треба також відзначити, що результат подвоєння іноді може бути > 1. Однак таке переповнення розрядної сітки усувається на наступному кроці алгоритму, оскільки після подвоєння завжди виконується віднімання.

Основні недоліки розглянутого методу ділення такі:

аритмічність процесу ділення, яка обумовлена нерегулярністю виконання відновлення остачі, що призводить до ускладнення блоку керування діленням;

відносно мала швидкість ділення, оскільки в середньому для половини кроків потрібно виконувати додаткове додавання, що забезпечує відновлення остач.

Для ритмізації процесу ділення можна виконувати фіктивну дію у тих випадках, коли відновлення остачі не потрібне, що призведе до збільшення часу виконання операції. Разом з тим, операцію можна спростити, якщо відмовитись від відновлення остач.

Таблиця 3.18 - Приклад ділення з відновленням остач

Алгоритм ділення модулів чисел без відновлення остач зводиться до виконання таких дій.

П. 1. Подвоїти модуль діленого .

П. 2. Відняти від подвоєного модуля діленого модуль дільника. Одержана різниця є першою остачею.

П. 3. Проаналізувати знак остачі R. Якщо , то черговому розряду частки присвоїти цифру 1; якщо ж R < 0, то черговому розряду частки присвоїти цифру 0.

П. 4. Подвоїти остачу.

П. 5. Визначити чергову остачу, віднявши від попередньої остачі модуль дільника якщо і додавши до попередньої остачі модуль дільника якщо R < 0. Перейти до п. 3.

П. 3 - п. 5 виконувати до одержання всіх необхідних цифр частки.

Приклад 3.17. Поділити число А = - 0, 10100 на число В = 0, 11011, використовуючи метод ділення без відновлення остач.

Розв'язання. Для даних чисел маємо: =1; = 0, 10100; =0; = 0, 11011. Визначаємо знак частки: =10=1. Віднімання будемо виконувати як додавання доповняльних кодів, тому = 1,00101.

Усі дії, що виконуються в процесі ділення, наведені в табл. 3.19.

Відповідь: С= - 0, 10111.

В наведених алгоритмах пункт "Подвоєння остачі" можна замінити пунктом "Зменшити в два рази модуль дільника". В машині це буде відповідати зсуву дільника, а не остачі. Наявність двох варіантів зсуву для двох алгоритмів ділення приводить до чотирьох основних алгоритмів машинного ділення:

ділення з відновленням остач і зі зсувом дільника;

ділення з відновленням остач та з їх зсувом;

ділення без відновлення остач і зсувом дільника;

ділення без відновлення остач та з їх зсувом.

Алгоритми ділення з відновленням остач не знаходять практичного застосування в машинах у силу наведених вище причин, тому на рис. 3.8, а і б приведені тільки структурні схеми пристроїв для ділення без відновлення остач.

Для реалізації варіанта а необхідні 2n-розрядний регістр дільника (РгВ) з колами зсуву вправо, 2n-розрядний нагромаджувальний суматор (НСМ), (п+1)-розрядний регістр частки (РгС) з колами зсуву вліво, суматор за модулем два (М2), блок інвертування цифр (БІЦ) і блок керування (БК).

Таблиця 3.19 - Приклад ділення без відновлення остач

Перед початком ділення в нагромаджувальний суматор НСМ записується ділене. За допомогою М2 визначається цифра знакового розряду частки, що записується в знаковий розряд регістра РгС. Передавання модуля дільника в НСМ для додавання або віднімання забезпечується блоком керування, що аналізує цифру знакового розряду НСМ. Ця знакова цифра остачі, проходячи через блок БІЦ, інвертується і подається в молодший розряд регістра частки, де вона зсувається вже як цифра частки.

Для реалізації варіанта б необхідні: (п + 1)-розрядний регістр дільника; (п + 1)-розрядний регістр частки з колами зсуву вліво і (n + 1)-розрядний суматор з колами зсуву вліво. Решта блоків така сама, як для варіанта а.

а)

б)

Рис. 3.8. Варіанти пристроїв для ділення без відновлення остач:

а - зі зсувом дільника; б - зі зсувом остач

Аналіз обох схем показує, що апаратні витрати на реалізацію варіанта б менше, ніж варіанта а. Проте у варіанті б неможливо сумістити додавання і зсув, оскільки додавання в НСМ можна тільки після закінчення зсуву коду остачі в нагромаджувальному суматорі. В варіанті а кожну цифру дільника з відповідного розряду регістра РгВ можна одночасно передавати за двома адресами: в сусідній правий розряд цього регістра (зсув) і у відповідний розряд НСМ, тобто починати виконувати додавання модуля дільника (або його доповнення) до остачі. Виходячи з цього, час ділення за алгоритмом без відновлення остач і зі зсувом дільника дорівнює , тоді як зі зсувом остач - .

3.5.3. Ділення чисел, що представлені в доповняльному коді

Коли в пам'яті машини числа зберігаються в доповняльному коді, то виникає задача пошуку найраціональніших методів ділення в доповняльному коді. Так само як і в разі множення, тут можливі два варіанти:

- переведення операндів у прямий код, одержання частки звичайним способом і переведення його в доповняльний код перед записом у пам'ять;

- ділення операндів у доповняльному коді з одержанням частки в необхідному вигляді.

Реалізація другого варіанта так само проста, як і першого. Необхідно тільки керувати логікою утворення цифр частки. Принципово є можливість одержувати ці цифри як з виходу БІЦ, так і минаючи цей блок. При цьому буде формуватись обернений код частки, який неважко перетворити в доповняльний код. Практична реалізація такого ділення може бути організована двома шляхами:

аналізуючи знаки операндів блок керування БК організує передавання знакових цифр остач із НСМ в регістр частки так, щоб результат завжди формувався в оберненому коді (тобто додатна частка складалась із прямих значень цифр, а від'ємне - з обернених);

аналізуючи знаки операндів блок БК організує спочатку або віднімання модуля дільника від модуля діленого, або віднімання модуля діленого від модуля дільника, для того щоб логіка утворення частки в разі всіх можливих комбінацій знаків операндів залишалась незмінною. Разом з тим частка має обов'язково формуватись в оберненому коді.

Розглянемо чотири можливих випадки, що обумовлені комбінаціями знаків доповняльних кодів операндів.

Випадок 1. А > 0; B > 0; C = A/B > 0.

Ділення виконується як звичайно: знак частки визначається шляхом додавання знакових цифр операндів за модулем 2 і одночасно формується доповнення модуля дільника до двох. Цифри частки одержуються шляхом інвертування знакових цифр остач в БІЦ.

Випадок 2. А > 0; B < 0; C = A/B < 0.

Ділення починається з віднімання модуля дільника від діленого. У разі відсутності переповнення розрядної сітки знак першої остачі обов'язково буде дорівнювати 1. Отже, його потрібно без інвертування надіслати до знакового розряду РгС. Продовжується ділення звичайним шляхом, але знакові цифри остач надходять до регістра частки минаючи БІЦ. По закінченню ділення в РгС утворюється обернений код від'ємної частки. Додаванням одиниці до (п + 1)-го розряду частки здійснюється одночасно округлення частки і переведення оберненого коду в доповняльний.

Приклад 3.18. Поділити число А = 0,1010 на число В = - 0,1101, використовуючи ділення в доповняльному коді.

Розв'язання. Для даних чисел маємо: [А]д = 0,1010; [В]д = 1,0011.

Усі дії, що виконуються в процесі ділення, наведені в табл. 3.20. Обернений код частки має вигляд 1,00111. Додавши одиницю до наймолодшого розряду і відкидаючи його, одержимо [С]д = 1,0100

Відповідь: С= - 0,1100.

Таблиця 3.20 - Приклад ділення в доповняльному коді для випадку А > 0 і B < 0

Випадок 3. А < 0; B > 0; C = A/B < 0.

Цей випадок є дзеркальним відображенням попереднього. Отже, для того щоб одержати обернений код від'ємної частки, необхідно надсилати знакові цифри остач до регістра частки через БІЦ. Наприкінці ділення, так саме як у другому випадку, необхідно додати одиницю до (п + 1)-го розряду частки для переведення його в доповняльний код і округлення одночасно.

Приклад 3.19. Поділити число А = - 0,1010 на число В = 0,1101, використовуючи ділення в доповняльному коді.

Розв'язання. Для даних чисел маємо: [А]д = 1,0110; [В]д = 0,1101.

Усі дії, що виконуються в процесі ділення, наведені в табл. 3.21. Обернений код частки має вигляд 1,00111. Додавши одиницю до наймолодшого розряду і відкидаючи його, одержимо [С]д = 1,0100

Відповідь: С= - 0,1100.

Таблиця 3.21 - Приклад ділення в доповняльному коді для випадку А < 0 і B > 0

Випадок 4. А < 0; B < 0; C = A/B > 0.

Ділення починається з віднімання модуля діленого від модуля дільника. Для цього достатньо перетворити попередньо тільки код дільника. В процесі ділення знакові цифри остач необхідно надсилати до регістра частки без інвертування, минаючи БІЦ, оскільки частка має бути додатною, а її доповняльний код - співпадати з прямим.

3.5.4. Особливості ділення чисел з плаваючою комою

Для чисел і , що представлені в формі з плаваючою комою, частка визначається за формулою:

де , .

Звідси випливає, що процес ділення складається з чотирьох етапів:

ділення мантис;

віднімання порядків;

нормалізація мантиси частки;

корегування порядку частки.

Перші два етапи можуть виконуватись одночасно, оскільки вони незалежні один від одного. При цьому ділення мантис повністю співпадає з діленням чисел, що представлені в формі з фіксованою комою. Відміна полягає лише в тому, що мантиси операндів можуть співвідноситись одна з одною довільно. Оскільки мантиси діленого і дільника - нормалізовані числа, то можливі такі випадки: ; .

Коли мантиса діленого більше або дорівнює мантисі дільника, то на початку ділення одержується цифра частки, що дорівнює 1 і яка записується в цілу частину частки. Решта дій над мантисами аналогічні діям над числами, що представлені в формі з фіксованою комою. Одержана при цьому мантиса частки буде мати порушення нормалізації праворуч. Воно усувається шляхом зсуву коду мантиси на один розряд управо і, відповідно, корегується порядок частки шляхом додавання одиниці до різниці порядків.

Коли мантиса діленого менше мантиси дільника, то на початку ділення одержується цифра частки, що дорівнює 0 і яка записується в цілу частину частки. Далі ділення мантис продовжується за правилами ділення чисел, що представлені в формі з фіксованою комою. Одержана при цьому мантиса частки буде мати нормалізовану форму.

Під час виконання операції ділення чисел з плаваючою комою можуть мати місце такі особливі випадки.

Якщо дільник дорівнює нулю, то формується сигнал "Зупинка машини".

Оскільки в процесі ділення порядки віднімаються, то можливе переповнення розрядної сітки порядків. Коли виникає переповнення в бік від'ємних значень порядку і воно не усувається після нормалізації і корегування порядку, то мантисі результату приписується машинний нуль, а порядку - найбільше від'ємне число.

У разі переповнення додатного порядку необхідно формувати ознаку переповнення порядку.

Ці особливі випадки можна передбачити в алгоритмі операції ділення введенням аналізатора дільника на нуль і корегування частки на підставі ознак результату.

Страницы: 1, 2, 3, 4




Новости
Мои настройки


   бесплатно рефераты  Наверх  бесплатно рефераты  

© 2009 Все права защищены.