Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






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






Лабораторна робота № 5

 

Мета роботи: Розглянути машинні алгоритми виконання операцій додавання та віднімання над числами у форматі з плаваючою крапкою.

 

Теоретичні відомості:

Будь-яке число Х в позиційній однорідній системі числення з основою р можна записати як X = M*PK, де М називають мантисою числа Х, а К – порядком цього числа (наприклад, X = 0, 4*108, то М = 0, 4, Р = 10, К = 8). Інакше порядок числа називають експонентою. Власне кажучи, число PK є масштабним коефіцієнтом, на який необхідно помножити число М для того, щоб уникнути переповнення розрядної сітки.

У форматі представлення чисел з плаваючою крапкою, виділяються 3 частини: знак числа (представляється вкрай лівим бітом формату); мантиса числа (представляється у вигляді правильного або неправильного двійкового дробу); порядок числа (представляється в загальному вигляді як ціле число зі знаком). Значення числа А з плаваючою крапкою, представляється у виді:

Апк=(sign A)-1*Ma*SPa

де sign A - знак 0 - «+», 1 - «-»

SPa - порядок числа А, S - підстава порядку.

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

Основними особливостями представлення чисел з плаваючою крапкою, у сучасних ЕОМ є:

1) Мантиса числа незалежно від його знака представляється в прямому коді

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

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

3) Як основа порядку використовується значення S=2.

4) У переважній більшості випадків прийняте використання нормалізованих чисел з метою підвищення їхньої точності.

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

6) В ЕОМ для представлення чисел з плаваючою крапкою, прийнято використовувати кілька форматів (як правило, щоб задовольнити суперечливим вимогам підвищення точності чисел і підвищення швидкості їхньої обробки).

Ці формати мають найменування:

а) короткий (одинарної точності) - 32 біта;

б) довгий (подвійної точності) - 64 біта;

в) розширений (розширеної точності) - 80 біт.

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

 

Короткий формат (В мові програмування PASCAL має назву SINGLE):

31 30 24 23 0

sign характеристика Мантиса

 

Подвійний формат (В мові програмування PASCAL має назву DOUBLE):

 

63 62 53 52 0

sign характеристика Мантиса

Розширений формат (В мові програмування PASCAL має назву EXTENDED):

 

79 78 64 63 0

Sign характеристика Мантиса

 

У мові програмування Pascal існує ще один тип даних з плаваючою крапкою REAL, який має довжину 6 байт і відрізняється від типу SINGLE тим, що має мантису на 2 байти довшу.

 

47 46 40 39 0

sign характеристика Мантиса

 

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

 

Додавання чисел з плаваючою крапкою. Нехай задано два числа у нормалізованому вигляді:

де, - мантиси у формі з фіксованою крапкою перед старшим розрядом у нормалізованій формі ,

знакові числа з фіксованою крапкою після молодшого розряду.

Треба знайти результат алгебраїчного додавання цих чисел: С = А + В, при цьому, зрозуміло, що С = ср – число з плаваючою крапкою, оскільки для того, щоб знайти суму двох чисел з різними порядками їх треба попередньо звести до спільного порядку, тобто перетворити один з доданків, наприклад, В таким чином

(mзаг - mа)

Після цього можна степінь основи системи числення у загальному степені винести за дужки і виконати лише додавання мантис:

 

 

Наприклад.

 

 

 

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

При цьому треба зробити " перенесення" крапки вліво на ma–mb – позицій (зсув мантиси вправо). При цьому частина розрядів мантиси може втратитись. Тому арифметичні дії над числами з плаваючою крапкою по своїй суті є наближеними, а не точними. При додаванні чисел в нормальній формі можна виділити 4 етапи.

Етапи алгебраїчного додавання чисел з плаваючою крапкою:

1. Урівноваження порядків доданків.

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

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

Якщо Z = 0, то нічого не перетворюється, а при Z> 0 перетворюється число В, інакше перетворюється число А.

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

2. Відбувається перетворення мантис доданків в один з спеціальних кодів (додатковий або обернений).

3. Виконується додавання мантис за правилами додавання чисел з фіксованою крапкою у відповідному спеціальному коді.

4. Потім результат переводиться в прямий код відбувається нормалізація результатів (при необхідності) до нього додається загальний порядок доданків і виконується округлення мантиси результату.

В залежності від абсолютних величин мантис доданків сума може одержуватися:

– нормалізованою;

– денормалізованою вправо;

– денормалізованою вліво (переповнення).

Треба відмітити, що додані нормалізовані числа завжди мають 1 в р-1 розряді, а від'ємні в оберненому та додатковому кодах 0 в р-1.

Приклади. Нехай для подання чисел з плаваючою крапкою буде: n=8, m=4.

       
 
   

 

 

  -1 -2 -3 -4 -5 -6 -7        
Sa a -1 a -2 a -3 a -4 a -5 a -6 a -7 Sm m 2 m 1 m 0

       
 
n =8
   
m =4
 


і всі операції будуть виконуватися в додатковому коді.

а) А =-0, 10101× 2101

В=0, 11001× 2011

Апр=1|1010100||0|101

Впр=0|1100100||0|011

Z=ma-mb=102=2> 0.

mзаг=0|101, ma> mb, необхідно зробити зсув мантіси числа B вправо на два розряди:

Впр=0|0011001||0|101

b'пр=0|0011001=в'дод

а дод= 1|0101100

+

співпадання числа в знаковому розряді і в старшому розряді – ознака денормалізації вправо.
в’ дод= 0|0011001

с дод = 1|1000101

 

с об=1|1000110

с пр=1|0111011

с пр=1|0111011||0|101 – мантиса денормалізована вправо на один розряд, тому необхідно зробити корекцію порядку:

m’ = m заг-1=101-1=100

відсікання, оскільки в результаті значущих цифр на одну більше ніж у вхідних даних!
Тоді спр=1|111011||0|100

С=-0, 111011× 2100

 

б) А =-0, 10101× 2101

В =-0, 11001× 2100

m заг=101, тому в мантисі В требазробитизсув на 1 порядок вправо.

А пр=1|1010100||0|101

В пр=1|1100100||0|100

Впр '=1|0110010||0|101

а дод= 1|0101100

переповнення (від'ємне) розрядної сітки, тому має місце денормалізація результата вліво.
в’ дод= 1|1001110

с дод=10|1111010

При цьому треба мантису результату зсунути на один розряд вправо, а порядок збільшити на 1.

С дод=1|0111101||0|110

С об= 1|0111100

С пр= 1|1000011 (є відсікання)

С =-0, 10001× 2110

 

Зауваження.

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

2. При денормалізації результата вліво, мантиса результата (разом із знаковим розрядом) зсувається на один розряд вправо, а порядок – збільшується на один розряд, оскільки сума двох мантис може бути денормалізована вліво не більше ніж на один розряд.

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

4. Кількість зсувів, як правило обмежується кількістю розрядів суматора, оскільки процес зсуву може бути нескінченним, якщо с=0. (мантиса =0). В цьому випадку після (n-1) зсувів результат покладається рівним машинному 0. Обнулення відбувається і тоді коли порядок числа внаслідок зсуву мантиси вліво зменшиться до числа меншого ніж допустиме число.

5. При додаванні може відбутися справжнє переповнення розрядної сітки числа, тобто переповнення розрядної сітки порядку. В даному випадку в ЕОМ формується сигнал про переповнення порядку.

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

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

 

Завдання на виконання лабораторної роботи.

1) Обрати свій номер варіанта згідно з останньою цифрою у номері залікової книжки (цифра „0” відповідає десятому варіантові).

2) Проаналізувати текст паскаль-програми у файлі lab5.pas і визначити її призначення.

3) Змінити програму у відповідності до варіанту.

4) Скомпілювати програму та запустити на виконання.

5) Підставити власні вхідні значення та проаналізувати результати роботи програми.

6) Оформити звіт та подати його викладачу разом з результатами виконання роботи.

 

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.