Лабораторна робота № 7
ПРОГРАМНЕ МОДЕЛЮВАННЯ МАШИННИХ АЛГОРИТМІВ ДІЛЕННЯ ЧИСЕЛ З ПЛАВАЮЧОЮ КРАПКОЮ
Мета роботи: Розглянути машинні алгоритми виконання операції ділення над числами у форматі з плаваючою крапкою.
Теоретичні відомості:
Ділення чисел, які представлені у форматі з плаваючою крапкою, відбувається за наступною схемою. Порядок результату визначається шляхом віднімання порядків діленого та дільника. Для визначення мантиси результату виконують ділення мантиси діленого на мантису дільника як правильних дробів у форматі з фіксованою крапкою. Мантиса частки може бути денормалізованою ліворуч. В такому випадку необхідно виконати нормалізацію результату, зсунувши його на один розряд праворуч, та збільшивши порядок на одиницю. Знак мантиси частки визначається шляхом додавання по модулю 2 знаків операндів ділення.
Ділення з відновленням залишку. Нехай ділене X і дільник Y є правильними дробами представлені в прямому коді в n-розрядній сітці. На першому кроці дільник Y вираховується з діленого X і визначається знак нульового залишку R0. R0 означає, що відповідна цифра частки відповідає розряду цілих, тобто 20. Якщо R0 > 0, то в розряді цілих встановлюється 1, формується ознака переповнення і операція ділення припиняється. В протилежному випадку в розряд цілих встановлюється цифра 0, і відбувається відновлення діленого Y шляхом додавання до залишку дільника X. Далі відбувається зсув відновленого діленого на один розряд ліворуч і повторне віднімання дільника. Знак таким чином отриманого залишку R1 визначає першу цифру після коми. Якщо залишок додатній, то цифра частки рівна 1, в протилежному випадку 0. При отриманому додатному залишку його знову зсувають на один розряд ліворуч та виконують віднімання дільника для визначення наступної цифри частки. Якщо ж залишок був від’ємним, то потрібно відновити залишок шляхом додавання до нього дільника. Такі дії повторюють до отримання потрібної кількості цифр.
Ділення без відновлення залишку. Алгоритм виконання операції ділення без відновлення залишку подібний до вищеописаного алгоритму ділення з відновленням залишку. Відмінність полягає в тому, що якщо на певному кроці, в результаті віднімання від поточного залишку дільника, отримується від’ємний залишок, то його наступне відновлення не проводиться, а замість цього на наступному кроці при виконанні порівняння залишку та дільника операція віднімання замінюється операцією додавання.
У випадку коли буде вироблено ознаку переповнення розрядної сітки, необхідно ділене X зсунути праворуч на один розряд і знову розпочати ділення. Після завершення операції частку зсувають ліворуч на те число розрядів, на яке зсувалось праворуч ділене.
Розглянемо приклад.
Нехай X = 1.4375
Y = 3.8125
Необхідно обчислити Z = X*Y.
X2 = 1.0111
Y2 = 11.1101
Число X представлене у форматі SINGLE:
0 01111111 011100000000000000000000
Число Y представлене у форматі SINGLE:
0 10000000 111010000000000000000000
Знаходимо характеристику результату 01111111 – 10000000 + 01111111 = 01111110
Знаходимо знак мантиси 0 0 = 0
Виконуємо ділення мантис за алгоритмом з відновленням залишку:
Пояснення |
Операції, операнди, результати |
Цифри частки |
1 |
2 |
3 |
X -Y R0 |
0|101110000000000000000000 1|000011000000000000000000 1|110001000000000000000000 |
0, |
Відновлення Зсув -Y R1 |
0|101110000000000000000000 1|011100000000000000000000 1|000011000000000000000000 0|011111000000000000000000 |
0,1 |
Зсув -Y R2 |
0|111110000000000000000000 1|000011000000000000000000 0|000001000000000000000000 |
0,11 |
Зсув -Y R3 |
0|000010000000000000000000 1|000011000000000000000000 1|000101000000000000000000 |
0,110 |
Відновлення Зсув -Y R4 |
0|000010000000000000000000 0|000100000000000000000000 1|000011000000000000000000 1|000111000000000000000000 |
0,1100 |
Відновлення Зсув -Y R5 |
0|000100000000000000000000 0|001000000000000000000000 1|000011000000000000000000 1|001011000000000000000000 |
0,11000 |
1 |
2 |
3 |
Відновлення Зсув -Y R6 |
0|001000000000000000000000 0|010000000000000000000000 1|000011000000000000000000 1|010011000000000000000000 |
0,110000 |
Відновлення Зсув -Y R7 |
0|010000000000000000000000 0|100000000000000000000000 1|000011000000000000000000 1|100011000000000000000000 |
0,1100000 |
Відновлення Зсув -Y R8 |
0|100000000000000000000000 1|000000000000000000000000 1|000011000000000000000000 0|000011000000000000000000 |
0,11000001 |
Зсув -Y R9 |
0|000110000000000000000000 1|000011000000000000000000 1|001001000000000000000000 |
0,110000010 |
Відновлення Зсув -Y R10 |
0|000110000000000000000000 0|001100000000000000000000 1|000011000000000000000000 1|001111000000000000000000 |
0,1100000100 |
Відновлення Зсув -Y R11 |
0|001100000000000000000000 0|011000000000000000000000 1|000011000000000000000000 1|011011000000000000000000 |
0,11000001000 |
Відновлення Зсув -Y R12 |
0|011000000000000000000000 1|110000000000000000000000 1|000011000000000000000000 1|110011000000000000000000 |
0,110000010000 |
Відновлення Зсув -Y R13 |
0|110000000000000000000000 1|100000000000000000000000 1|000011000000000000000000 1|100011000000000000000000 |
0,1100000100001 |
Зсув -Y R14 |
1|000110000000000000000000 1|000011000000000000000000 0|001001000000000000000000 |
0,11000001000011 |
Зсув -Y R15 |
0|010010000000000000000000 1|000011000000000000000000 1|010101000000000000000000 |
0,110000010000110 |
Відновлення Зсув -Y R16 |
0|010010000000000000000000 0|100100000000000000000000 1|000011000000000000000000 1|100111000000000000000000 |
0,1100000100001100 |
Відновлення Зсув -Y R17 |
0|100100000000000000000000 1|001000000000000000000000 1|000011000000000000000000 0|001011000000000000000000 |
0,11000001000011001 |
Зсув -Y R18 |
0|010110000000000000000000 1|000011000000000000000000 1|011001000000000000000000 |
0,110000010000110010 |
1 |
2 |
3 |
Відновлення Зсув -Y R19 |
0|010110000000000000000000 0|101100000000000000000000 1|000011000000000000000000 1|101111000000000000000000 |
0,1100000100001100100 |
Відновлення Зсув -Y R20 |
0|101100000000000000000000 1|011000000000000000000000 1|000011000000000000000000 0|011011000000000000000000 |
0,11000001000011001001 |
Зсув -Y R21 |
0|110110000000000000000000 1|000011000000000000000000 1|111001000000000000000000 |
0,110000010000110010010 |
Відновлення Зсув -Y R22 |
0|110110000000000000000000 1|101100000000000000000000 1|000011000000000000000000 0|101111000000000000000000 |
0,1100000100001100100101 |
Зсув -Y R23 |
1|011110000000000000000000 1|000011000000000000000000 0|100001000000000000000000 |
0,11000001000011001001011 |
Зсув -Y R24 |
1|000010000000000000000000 1|000011000000000000000000 0|000101000000000000000000 |
0,110000010000110010010111 |
Частка Z у форматі SINGLE має вигляд:
0 01111110 10000010000110010010111
Завдання на виконання лабораторної роботи.
-
Обрати свій номер варіанта згідно з останньою цифрою у номері залікової книжки (цифра „0” відповідає десятому варіантові).
-
Проаналізувати текст паскаль-програми у файлі lab7.pas і визначити її призначення.
-
Змінити програму у відповідності до варіанту.
-
Скомпілювати програму та запустити на виконання.
-
Підставити власні вхідні значення та проаналізувати результати роботи програми.
-
Оформити звіт та подати його викладачу разом з результатами виконання роботи.
Варіанти для виконання лабораторної роботи.
-
Ділене: 45.6, дільник: -124.94
-
Ділене: -67, дільник: -4.14
-
Ділене: -5.6, дільник: 4
-
Ділене: -11.78, дільник: 2.2
-
Ділене: 4.14, дільник: -1.4
-
Ділене: 15.16, дільник: -1.9
-
Ділене: -25.5, дільник: -24.4
-
Ділене: -8.7, дільник: 12.4
-
Ділене: 5.5, дільник: -5.6
-
Ділене: 12.1, дільник: -65.5
Зауваження: Звіт повинен містити титульну сторінки відповідно до зразка (див. додаток л.р. №1), мету, завдання роботи, варіант завдання, хід роботи та висновки.
Контрольні запитання:
-
Сформулюйте загальне правило ділення чисел з плаваючою крапкою.
-
У якому випадку може виникнути денормалізація частки при діленні чисел з плаваючою крапкою?
-
Денормалізаця якого виду може виникнути при діленні чисел з плаваючою крапкою?
-
Яким чином відбувається нормалізація денормалізованої частки?
-
Сформулюйте машинний алгоритм ділення з відновленням залишку чисел з плаваючою крапкою.
-
Сформулюйте машинний алгоритм ділення без відновлення залишку чисел з плаваючою крапкою.
-
У якому випадку генерується ознака переповнення розрядної сітки при виконанні операції ділення чисел у форматі з плаваючою крапкою?
-
Які дії виконують при виникненні переповнення розрядної сітки?
-
Яким чином отримується знак результату при виконанні операції ділення чисел у форматі з плаваючою крапкою.
-
Яким чином отримується порядок результату при виконанні операції ділення чисел у форматі з плаваючою крапкою.