Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ОФК

.pdf
Скачиваний:
70
Добавлен:
12.02.2016
Размер:
965.02 Кб
Скачать

Оскільки похибка подання числа залежить тільки від розрядності мантиси, то щоб знайти похибкуподання числа уформі з рухомою комою, значенняцієїпохибки потрібнопомножитина порядок числа pA :

A

 

 

0,5 2 n pA

2 n

 

 

 

nmax

 

2 1 pA

 

 

 

і

 

 

 

 

 

A

 

0,5 2 n pA 0,5*2 n

nmin

 

(1 2 n ) pA

 

 

 

де n –кількістьрозрядівдляподаннямантисичисла.

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

Контрольні запитання та завдання

І. Дайтевідповідінапоставленізапитання:

1.Пояснітьпоняття“числа скінченоїточності”.

2.Яка причина явища “скінченої точності” чиселукомп’ютері?

3.Який ряд чисел можна записати в 4 десяткових розрядах? Які типи чисел не увійдуть уцей ряд?

4.Що називається “формою подання чисел” укомп’ютері?

5.Щоназивається “машинним зображенням” числа?

6.Щотаке“розрядна сітка”комп’ютера?Чиоднакова розряднасіткадля всіхкомп’ютерів?

7.Коли відбувається переповнення розрядної сітки комп’ютера? Які наслідкицьогоявища?

8.Як визначаєтьсядіапазон поданнячисел з фіксованою комою?

9.Яке машинне зображення формату чисел з фіксованою комою?

10.Які властивості форматуподання чисел з фіксованою комою?

11.Чимхарактеризуютьсяформати арифметикипідвищеноїточності?

12.Як зображаються числа унормальній формі?

13.Які властивості форматуподання чисел з фіксованою комою?

14.Поясніть процес нормалізації чисел з рухомою комою.

15.Порівняйтедіапазониподаннячиселз фіксованоюі рухомоюкомою.

16.Як визначаєтьсяхарактеристика чисел з рухомою комою?

17.Які є машинні зображення форматучисел з фіксованою комою?

18.Коли і які дії виконуються під час нормалізації чисел у форматі з рухомою комою?

19.Якіє видиподаннячиселудвійково-десятковомуформаті?

20.Яквизначаєтьсяабсолютна похибкаподаннячисел?

21.Яквизначаєтьсявідносна похибкаподаннячисел?

22.Як визначаєтьсяусереднена абсолютна похибкаподання чисел?

23.Якіпричини обмежуютьточністьідіапазон поданнячисел?

24.Пояснітьпоняття“діапазонподаннячисел”?

60

61

II. Нормалізуйтедвійковічислаз рухомоюкомою:

1. 111,01101 10 10 ; 0,0010101 10 110 ;

2.1010,11011 10 11 ; 0,00001001 10 101 ;

3.1101,10001 10 101 ; 0,0011011 10 110 ;

4.101,01101 10 100 ; 0,00010111 10 111 ;

5.1000,0111 10 11 ; 0,0001101 10 11 ;

6. 1001,0011 10 10 ; 0,00001011 10 100 ;

7.1100,10101 10 11 ; 0,000101 10 101 ;

8. 1001,001 10 101 ; 0,0001101 10 10 ;

9.1010,11011 10 110 ; 0,00001011 10 110 ;

10.111,10101 10 10 ; 0,0011011 10 101;

11.1110,0101 10 11 ; 0,000101 10 11 ;

12.1001,1011 10 11 ; 0,0000011 10 111;

13.1100,0011 10 10 ; 0,000011011 10 10 ;

14.1011,10101 10 100 ; 0,0001101 10 110 ;

15.1000,10001 10 11 ; 0,00010101 10 111.

62

РОЗДІЛ 4

КОДУВАННЯ ВІД’ЄМНИХ ЧИСЕЛ

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

Відомі різні вимоги доцифрових кодів залежно від видуінформації абоспособуїїобробки. Так, для задачіпередаванняінформаціїпоканалуіз завадами потрібні коди із завадостійкими властивостями і можливістю виправлення помилок, наприклад, коди Геммінга. Стиснення інформації важливе з поглядуефективності. Під час передавання стиснутих даних час завантаження апаратури відповідно зменшується; з погляду збереження інформації стиснення потребує меншого обсягу пам’яті. Стиснення – це кодування джерела інформації, наприклад кодом Хаффмена або кодом Шеннона-Фано. Для різних видів інформації і різних задач та способів її обробки використовують різні методи кодування. Загальним залишається використаннядвійкової системичисленнядлябільшості методівкодування.

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

По-перше,центральнимскладовим елементомарифметико-логічного пристрою(АЛП) єсуматор, якийвиконує лишепорозрядне додаваннядвох кодівіз урахуваннямвагкожногоз розрядівтаз організацієюміжрозрядних переносів. Знак числа суматор не “розуміє”, його не розрізняє і сприймає знакчислаяк звичайнийдвійковийкод.

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

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

У комп’ютерах для спрощення виконання арифметичних операцій застосовуютьспеціальнідвійковікодидляподаннявід’ємнихчисел:обернений і доповняльний. Додатні числа кодують у прямому коді. За допомогою цих кодівспрощуєтьсявизначеннязнакурезультатуопераціїуразіалгебраїчного додавання.Операція додавання(абоалгебраїчногододавання)замінюється

63

Aпр 0,1101.
Aпр 1 0,10101 1,10101.

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

Поняттядоповненнячастковорозглянутеурозділі2.2.5.Тутмидодатково розглянемойоговластивості стосовновиконанняарифметичнихоперацій.

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

Уявимо собі, що ми маємо тільки два розряди для подання чисел у десятковійсистемічислення. Тодімаксимальнечисло,якеможназобразити буде 99 , а вага третього, неіснуючого старшого розряду, буде 102 , тобто 100. У такому випадку для числа 20 доповняльним буде число 80 , яке доповнює 20 до100 (100 20 80 ).Інавпаки–длячисла 80 доповняльним будечисло20.Отже,завизначеннямвіднімання 80 20 60 можназамінити надодавання: 80 80 1_ 60 .Тутстаршаодиницявиходитьзамежівиділеної розрядноїсітки,уякійзалишаєтьсятількичисло60,тобторезультатвіднімання

з80 числа 20 .

Атепер розглянемо подібний приклад для чисел, які подані чотирирозрядним двійковим кодом.Знайдемодоповняльнечислодля 00102 210 .

Потрібновідчисла 1 0000 віднятичисло 0 0010 ,отримаємо 0 1110 ,якеі єдоповняльнимкодом 2.Розряд,зображенийуквадратнихдужках,насправді не існує. Але через те, що в нас чотирирозрядна сітка, то виконати таке відніманнявпринципі неможливо, атим більшеминамагаємосяпозбутися віднімання. Тому доповняльний код числа отримують іншим способом: спочатку одержують обернений (інакше – інверсний) код числа, а потім додають до нього 1. Виконавши все це з нашим числом 2, побачимо, що одержимоаналогічнувідповідь:

0010 інверсія 1101 0001 1110

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

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

Розглянемощераз, як процедура віднімання, за допомогою подання числа, що віднімається, у доповняльному коді, зводиться до процедури додавання.Віднімемовідчисла 1010 число 710 : 10 7 3 .

64

Якщо обидва операнди подані упрямомукоді,

0,001010

 

топроцедура відніманнявиконуєтьсятак:

1,000111

 

(у прикладі кома відділяє знак).

0,000011

310

Аякщочисло,яке віднімається, ( 7 )податиу

0,001010

 

доповнювальномукоді, топроцедуравіднімання

1,111011

зводитьсядопроцедуридодавання.

10,000011 310

відкидається

 

4.1. Прямий код

Прямийкодґрунтуєтьсянаприродномуподаннічиселувиглядіїхнього абсолютного значення з кодом відповідного знака: плюса або мінуса у старшомурозряді. Прийнято,щоплюскодуєтьсяякнуль(0),амінус–як

одиниця(1).

Формулаутворенняпрямогокодудвійковогочисла A 0, a1a2a3...an маєвигляд

 

A, якщоA 0

Aпр

(4.1)

1 A, якщоА 0.

Приклад4.1. 1. A 0,1101; 2. A 0,10101 ;

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

З (4.1) випливає, що нуль в прямому коді може бути додатним і від’ємним:

A 0,00...00 ;

Aпр

0,00...00 .

A 0,00...00 ;

Aпр

1,00...00 .

Прямийкод використовуютьдлязберіганнячисел узапам’ятовуючих пристроях(ЗУ), упристрояхвведенняі виведення,атакожпідчасвиконання операцій множення.

4.2. Обернений код

Це подання від’ємногочисла називають доповненням до1. Тут так самоєзнаковийрозряд(0–це“+”,1–це“–”).Щобзробитичисловід’ємним, потрібно виконати інверсію усіх розрядів числа, а у знаковому розряді поставити1.

65

Формула утворення оберненого коду має вигляд:

А, якщо

А 0

 

 

 

 

(4.2)

Aоб

n

 

 

, якщоА 0

 

10 А 10

 

 

Приклад4.5. A 0,100110.

Aоб 10 0,100110 0,000001 1,011001.

Порівнюючивід’ємне число A з йогооберненимкодом Aоб , можна вивестиправило:щобзаписативід’ємнечисловоберненомукоді,потрібно

узнаковомурозрядіцьогочислапоставитиодиницю,авчисловихрозрядах нулізамінитиодиницями,аодиниці–нулями.

Операція заміни нуля на одиницю і навпаки називається інверту-

ванням.

В оберненому коді нуль зображається неоднозначно, є два подання нуля:+0і–0.

A 0,00...00 ;

Aоб

0,00...00 ;

A 0,00...00 ;

Aоб

1,11...11.

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

Оберненийкод додатногочислаповністюспівпадаєз відображенням числа у прямому коді.

4.3. Доповняльний код

Для подання від’ємних чисел удвійковій системі числення частіше використовуєтьсясистема доповненнядодвох. Унійєзнаковийрозряд(0– це “+ ”, а 1 –це “–”). Доповнення виконується удва етапи. Спочаткукожна 1замінюєтьсяна0,акожен0–на1.Потімдоотриманогорезультатудодається 1 (до молодшого розряду). Наприклад, розглянемо перетворення

восьмирозрядного числа – 610

уформуз доповненням до двох:

00000110

(+ 6)

 

 

11111001

(-6усистеміз доповненнямдо1–див. розділ4.2)

11111010

(-6усистеміз доповненням до2).

Формулаутвореннядоповняльногокодудвійковогочисла маєвигляд:

 

Aдоп

A, якщо

А 0

 

 

(4.3)

 

 

10 A, якщоА 0

Приклад4.2. A 0,101010 ;

Aдоп 10 0,101010 1,010110.

Як видно з виразу(4.3), доповняльний код додатного числа повістю співпадає з зображенням числа упрямомукоді.

66

Порівнюючи від’ємне число A з його доповняльним кодом Aдоп ,

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

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

Приклад4.3. Записатидвійкове число A 0,0101 удоповняльномукоді.

Aдоп 1,1010 0,0001 1,1011.

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

Приклад4.4. Перетворитидоповняльнийкод Aдоп 1,1011 від’ємногочисла упрямий код.

Aпр 1,0100 0,0001 1,0101.

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

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

4.4.Модифіковані коди

Зпогляду побудови АЛП вони зручні для виявлення переповнення розрядної сітки, яке може виникнути під час додавання чисел. Ці коди відрізняються від простих машинних кодівтим, щона відображення знака відводитьсядва розряди:плюсвідображаєтьсядвома нулями(00),а мінус– двома одиницями (11).

Умодифікованихкодахдругийрозрядліворучвідкомивизначаєзнак числа, а першийрозрядслугуєдляаналізупереповненнярозрядної сіткипід час виконання арифметичних операцій над числами. Значення 01 та 10 у

знаковихрозрядах свідчатьпропереповнення розрядноїсітки.

67

A B S

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

Приклад4.5. Подати двійкові числа A1 0,1101101 і A2 0,1101101 у прямому, доповняльномуі оберненомумодифікованих кодах.

A1мпр 00,1101101; А1мдоп 00,1101101; А1моб 00,1101101.

A2мпр 11,1101101; Ам2 доп 11,0010011; А2моб 11,0010010.

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

Контрольні запитання та завдання

1.Пояснітьсуть кодуванняінформації.

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

3.Яквпливаютьзнакичиселнаможливістьякісноїобробкиінформації?

4.Щотаке “доповнення”чисел?

5.Якийкод називаютьдоповняльним?

6.Якстворюють доповняльнийкод?

7.Якпозначаютьзнаки укодахчисел?

8.Якийкод називаютьпрямим?

9.Який код називають оберненим?

10.Як створюється обернений код?

11.Як подають додатні числа у прямому, оберненому і доповняльному кодах?

12.Щоявляє собоюоперація інвертування?

13.Коли виконується і щоє результатом другого доповнення?

14.Які проблеми виникають під час подання чисел уоберненомукоді?

15.Які проблеми є при поданні чисел удоповняльномукоді?

16.Якстворюються модифікованідоповняльнийі оберненийкоди?

17.Пояснітьпризначення знаковихрозрядівумодифікованихкодах.

68

РОЗДІЛ 5

АРИФМЕТИЧНІ ДІЇ НАД ДВІЙКОВИМИ ЧИСЛАМИ

5.1.Арифметика двійкових чисел без знака

5.1.1.Додавання і відніманні двійкових чисел без знака

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

Узагальномувипадку, процедуридодаваннятавідніманнядвохчисел удовільнійпозиційнійсистемічисленняпочинаютьсязмолодших

розрядів.

Код суми кожного i -го розряду отримуємо у результаті додаванняai bi сi 1 si , де ci 1 відповідає переносу з попереднього до i -го [молодшого, i 1 ]–розряду. Якщоумолодшомурозрядікодсумивийшов більшим аботаким, щодорівнюєоснові системи числення, то ci 1 1 , а в іншихвипадках ci 1 0.

Кодрізниці кожного i -горозрядуодержуємоурезультатівіднімання

ai bi ri 1 si , де ri 1 відповідаєзаймуумолодшірозрядизістаршого розрядувеличини, що дорівнює основі системи числення, якщо необхідно відменшогочиславіднятибільше.

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

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

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

69

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

 

Таблиця 5.1.

Приклад5.1.

0+0

 

0

 

 

1111

– перенесення

0+1

 

1

 

 

 

 

 

10001

– перший доданок

1+0

 

1

 

 

 

 

 

10111

– другий доданок

1+1

 

 

 

101000

– сума

 

10

 

 

 

 

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

Дію відніманнярозпочинаютьз наймолодших розрядів.Якщоякийнебудьзрозрядівдвійковогочислазменшуваногодорівнює0,аоднойменний розрядвід’ємника дорівнює1, топозичаютьодиницюізсусідньогостаршого розряду зменшуваного і тоді у ньому матимемо дві одиниці. Табл. 5.2. є таблицеювідніманнядвійковихчисел.

Таблиця 5.2.

Приклад5.2.

 

 

 

 

0-0

0

 

позичання

1-0

1

 

 

1010

1-1

0

 

101

 

 

 

0101

10-1

1

 

 

5.1.2. Множення двійкових чисел без знака

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

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

1)якщо молодший розряд множника дорівнює 1, то двійкове множене просто копіюється без змін як проміжний добуток;

2)якщоцейрозрядмножникадорівнює0,топроміжнийдобутокдорівнює0.

70

Ціправилаілюструєприклад5.3.Діївиконуютьтак:упершомурозряді множникастоїть1, томуякпершийпроміжний добутоккопіюєтьсязначення множеного.Унаступномуліворучрозрядімножникає0,і, відповідно,другий проміжнийдобутокдорівнює 0.Далідіїтаксамоповторюють.

Під час визначення кожного наступного проміжного добутку він зсувається вліво на один розряд відносно попереднього. Всі отримані проміжнідобутки, враховуючизсуви, додаютьсяміжсобою. Табл. 5.3. –це таблицямноженняодногорозрядудвійковихчисел.

Таблиця 5.3.

 

Приклад5.3.

 

 

 

 

1001

– множене

0*0

0

 

 

 

 

 

 

*1101

– множник

1*0

0

 

 

0*1

0

 

 

1001

проміжні

 

+

0000

1*1

1

 

 

 

1001

добутки

 

 

 

1001

= добуток

 

 

 

 

 

 

1110101

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

Відомітакі дваосновніспособивиконання операціїмноження:

1)Множення,починаючизмолодшихрозрядівмножника, іззсувомвліво:

множене

*1101 – множник

1101

+110100001101

1101

10101001

– добуток

2) Множення, починаючи із старших розрядів множника, із зсувом вправо:

 

1101

– множене

*1101

– множник

 

1101

 

+

1101

 

0000

 

 

1101

– добуток

10101001

71

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

5.1.3. Ділення двійкових чисел без знака

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

Ділення вручну – це процес спроб та помилок. Наприклад, якщо потрібнорозділити4610на77,миспочаткупомічаємо,що77не“входить”у 46, томупробуєморозділити461на77. Можнаприпустити, щочисло461у шістьразівбільшевіддільника77, алеперевіркапоказуєпомилковістьтакого припущення:

4610 77

462

6

1

 

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

приділенні. Нехайнам потрібноподілитидесятковечисло5на2.

 

Першаперевірка:чиділенебільшеніждільник;

5

2

різниця додатна, томупродовжуємо.

-2

2,5

 

Друга перевірка:чиділенебільшеніждільник;

3

різниця додатна, томупродовжуємо.

-2

Третяперевірка:чиділенебільшеніждільник;

-1

різницявід’ємна,томувідновлюємозалишок.

+2

Оскільки відбулися дві позитивні перевірки, тому перший

10

розряд частки =2.

-2

Множимо залишок на 10 – основусистеми числення

8

іпродовжуємоперевіркиякі раніше, але участці

-2

требапоставитикому.

 

Таких перевірок буде 5, доки різниця дорівнюватиме 0,

 

томуучастку запишемочисло5.

 

72

 

Вуніверсальнихкомп’ютерах,якправило,реалізуєтьсяцей“шкільний” алгоритмділеннячисел.“Шкільний”алгоритмділенняполягаєутому, щона кожному кроці віднімають дільник від діленого (починаючи із старших розрядів) стільки разів, скільки це можливо для отримання найменшого додатного залишку. Тоді у наступний розряд частки записують цифру, яка дорівнюєкількостідільників,щомістятьсяуділеномунацьомукроці.Інакше кажучи, під час ділені операцію віднімання повторюють доти, доки зменшуваненестане меншим віддільника, щовіднімається. Кількістьцих повторівпоказує,скількиразівчисло,щовіднімається(дільник),вкладається у зменшуване.

Висновок:значеннярозрядучастки–цекількість відніманьділеного доотриманнявід’ємногозалишку,якийвідновлюєтьсядодаванням донього дільника.

Та сама проблема виникає, коли комп’ютер пробує розділити одне числона інше. Але длядвійкової системичислення євідмінність –дільник або вкладається уділене – тоді у часткузаписуємо 1, або не вкладається – тодіучасткузаписуємо0іпотрібнорозглядатидодатковийрозрядуділеному. Це значно полегшує процедуруділення.

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

101

10

Одразужможнапомітити,щодільник(10)вкладається

у ділене, а тому записуємо 1 у старший розряд частки.

-10

10,1

Множимодільник на 1і віднімаємоз діленого.Різниця =0.

+ 01

 

- 10

 

Об’єднуємо 0 залишку із значенням наступного розряду

-1

 

дільника–це1.Оскількидільник (10)0разів вкладаєтьсяу

+01

 

величину 01, записуємо 0 у наступний розряд частки, а до

010

 

 

значення 01 додаємо наступний розряд діленого. Оскільки

-10

 

0

 

цьогорозрядунемає, додаємодозаписузалишку0,аучастці

 

 

ставимокому,якавідділяєцілучастинучасткивіддробової.

Набудь-якомукроці діленнялегковізуальновизначити, чидорівнює

частка 1або0, але комп’ютерне володіє такоюздатністю іповинен щоразу виконувати пробне віднімання. Якщо після припущення про значення пробного розряду частки і віднімання дільника результат виявиться від’ємним, то поточне значення діленогоповинно бути “відновлене” або ж потрібнозастосуватиякий-небудь іншийметодділення.

73

Окрімрозглянутого, требавідзначитищеоднуособливістьвиконання операції ділення у комп’ютері, незалежно від форми подання чисел і прийнятого алгоритму: перед початком операції необхідно виключити можливість ділення на 0. Інакше задача втрачає сенс, тому що число “нескінченність” у арифметичних операціях використати не можливо. Більшість трансляторів ситуацію “ділення на 0” вважають “фатальною помилкою”івидають відповіднеповідомлення.

Розглянемо ще один приклад: розділимо 20410 на 1210 , тобто

110011002 : 11002 :

ділене

11001100

2 – дільник

дільник

-1100

2,5

1-ша остача

00001

 

-0 11 -0 110 -0 1100 -1100 0000

Двійкове, як і десяткове ділення, починається з аналізу діленого (11001100)ідільника(1100).Одразужвиявляється,щодільниквкладаєтьсяу4

старші розряди діленого 1100 і тому записують 1 у старший розряд поля частки.Множитьсядільникна1івіднімаєтьсявідстаршихрозрядівділеного, різницядорівнює0(уприкладі–4розряди-0000). Доцієїрізницідописують значеннянаступногорозрядуділеного,щодорівнює1.Оскількидільник(1100) 0разівукладаєтьсяв0001,записуємо0унаступнийза старшинствомрозряд поля частки, а до часткового залишку – числа 0001 дописуємо наступний розрядділеногоіотримуємо0011. Аналогічновиконуємоаналіз дотихпір, докиділененевиявляєтьсявичерпаним.

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

Звичайноукомп’ютерахопераціяділенняреалізуєтьсядвомаспособами:

з нерухомим дільником і діленим, що зсувається вправо;

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

74

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

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

5.1.4. Ділення з відновленням залишку

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

1.Початкове значення часткового залишку (ЧЗ) приймають таким, що дорівнюєстаршим розрядам діленого.

2.Частковий залишокподвоюється зсувом наодинрозрядвліво. Уйого молодший розряд, що звільняється під час зсуву, заносять наступну цифручастки.

3.Із зсунутогоЧЗвіднімаютьдільник іаналізуютьзнак результатувіднімання.

4.Наступнацифра модулячасткидорівнює1, колирезультатвіднімання додатний, і дорівнює 0, якщо він від’ємний. В останньому випадку значення залишку відновлюється до того значення, яке було до віднімання.

5.Пункти 2 – 4 послідовновиконують для отримання усіх цифр модуля

частки.

Крім того, доцільно операцію віднімання під час ділення чисел замінити додаваннямдільникау доповняльномукоді(див. розділ4.3). Тоді значення переносу від додавання буде утворювати значення відповідного розрядучастки.

Продемонструємо це на числах з попереднього прикладу. 20410 : 1210 , 110011002 : 11002 , алеспочаткудільник (1100)подамоудоповняльному коді, що дасть змогу обмежитися додаванням тоді, коли потрібно виконувати віднімання: 1100пр 1.0100д . Частка формується у деякому регістрі C , незаповненірозрядиякогопозначатимемочерез X .

75

Починаємо віднімати дільник від діленого (фактично – додавати доповнювальний код дільника). Якщо залишок буде додатнім, то у розряд часткизаписується1, інакше–0.

0.11001100 ділене 20410

+1. 01000000 дільник 1210

10.00001100 перший залишок

Перший(старший)біт часткидорівнює1, оскільки залишоквийшов додатнийібітпереносу=1: C 1XXXX . Далізсуваютьпершийзалишокна одинрозрядвлівоівідньоговіднімаєтьсядільник:

0.00011000

+1. 01000000

1.01011000 другий залишок

Залишок від’ємний, біта переносу немає, тому у наступний розряд частки записується 0, C 10XXX . Крім того, необхідно біти дільника повернутиназад першомузалишку, тобтододати дільник(упрямомукоді)і другийзалишок:

1.01011000

+0. 11000000

0.00011000 зміщений перший залишок

Даліщераззсуваєтьсявжезсунутий першийзалишокна одинрозряд влівоівідньоговіднімаєтьсядільник:

0.00110000

+1. 01000000

1.01110000 третій залишок

Третій залишок від’ємний, отже наступний (третій) розряд частки дорівнює0, C 100XX .Томузновуповертаємодільниктретьомузалишку:

1.01110000

+0. 11000000

0.00110000 двічі зміщений перший залишок

Зсуваємодвічізсунутийпершийзалишокна одинрозрядвлівоівіднімаємодільник:

0.01100000

+1. 01000000

1.10100000 четвертий залишок

76

Четвертийзалишокзновувід’ємний,переносунемає,тому C 1000X . Додаємодільникдочетвертогозалишку, результатзсовуємонаодинрозряд вліво,апотім зновувіднімаємодільник:

0.11000000 перший залишок після четвертого зміщення

+1. 01000000

0.00000000 п’ятий залишок

Залишокдодатний, отже C 10001 17 10 .Діленевичерпалося,–це ієвідповідь.

Наведемоще один приклад уіншій формі запису.

Доповнювальний код дільника

+

1 1 0 0 1 0 0

1 0 1 0

 

0 1 1 0

 

 

1 0 1 0

Є перенос

1

0 0 1 0

 

 

 

Доповнювальний код дільника

 

+

0 1 0 1

 

 

 

 

 

0 1 1 0

 

 

Повернення

Переносу немає

0

+

1 0 1 1

 

 

 

 

1 0 1 0

 

 

(відновлення)

 

 

 

0 1 0 1

 

 

залишку

 

 

 

1 0 1

0

 

 

 

 

 

+ 0 1 1 0

 

 

 

1

 

0 0 0

0

 

 

 

 

 

+ 0 0 0

0

 

 

 

 

0 1 1

0

 

 

0

 

0 1 1

0

 

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

5.1.5. Ділення без відновлення залишку

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

77

Наведемоцей алгоритм.

1.Початкове значення часткового залишку (ЧЗ) приймаєть таким, що дорівнюєстаршим розрядам діленого.

2.ЧЗподвоюєтьсязсувом наодин розрядвліво.Умолодший розрядЧЗ, щозвільняється під час зсуву, записується чергова цифра частки.

3.ІззсунутогоЧЗвіднімаєтьсядільник,якщозалишокдодатний,ідозсуну-

тогоЧЗдодаєтьсядільник,якщозалишоквід’ємний;

4.Наступнацифра модулячасткидорівнює1, колирезультатвіднімання додатний,інулю, якщовінвід’ємний;

5.Пункти 2 – 4 послідовновиконують, щоб отримати усі цифри модуля частки.

Яквидно,пункти1,2,5повністюспівпадаютьзвідповіднимипунктами

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

Доповнювальний код дільника

+

1 1 0 0 1 0 0

1 0 1 0

 

0 1 1 0

1 0 1 0

Є перенос

1

0 0 1 0

 

 

+

0 1 0 1

 

 

Доповнювальний код дільника

0 1 1 0

 

 

Переносу немає 0

 

1 0 1 1

 

 

 

 

0 1 1

0

 

 

 

+ 1 0 1

0

– прямий код

1

 

0 0 0

0

 

+

0 0 0 0

– доповнювальний

 

0 1 1 0

0

0 1 1 0

код дільника

5.1.6. Пришвидшення цілочислового ділення

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

заміна дільника на оберненувеличину, з подальшим множенням її на ділене;

скороченнячасуобчисленнячастковихзалишківутрадиційнихметодах ділення (з відновленням або без відновлення залишку) за рахунок

пришвидченняопераційдодавання(віднімання);

78

скороченнячасуобчисленняза рахунокзменшення кількостіоперацій додавання(віднімання)при розрахункучастковогозалишку;

обчисленнячасткиунадлишковій системічислення.

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

5.2. Додавання і віднімання двійкових чисел з фіксованою комою

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

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

A B A B .

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

доповняльному і оберненому кодах. Числа зберігаються у прямому коді, передвиконанням обчисленьїхперетворюютьнапотрібний–доповняльний або обернений – код і після виконання обчислень знову перетворюють на прямийкод.

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

A B A B 1.

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

79

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]