ЧПК з меншим порядком (денормалізація).
Вирівнювання порядків шляхом зменшення більшого порядку призводить до виходу за межі розрядної сітки обчислювальної машини і тому не використовується.
Природньо, що процес денормалізації мантиси супроводжується безповоротною втратою її молодших бітів, які зсуваються за межі розрядної сітки обчислювальної машини. Таким чином, арифметичні операції із ЧПК є по своїй природі наближеними, що обмежує використання ЧПК, наприклад, у фінансових розрахунках.
Після вирівнювання порядків денормалізована мантиса додається або віднімається від мантиси числа із більшим порядком. В обчислювальних машинах мантиси ЧПК зберігаються виключно в прямих кодах, тому віднімання денормалізованої мантиси доцільно здійснювати шляхом її представлення у додатковому коді із подальшим додаванням. Результат додавання нормалізується, після чого визначається знак результату.
Для обчислення суми і різниці цих чисел з плаваючою комою вирівнюються порядки, оскільки додавати або віднімати мантиси чисел можна в тому випадку, коли порядки чисел рівні.
Для визначення місця коми необхідно додати кількість знаків після коми в вхідних числах і пересунути кому на цю кількість знаків.
Для запису числа в базовому форматі одиничної довжини необхідно записати отриманий результат у вигляді нормалізованої мантиси. Для нормалізації необхідно пересунути кому на один знак вліво, до порядку числа додати одиницю (одиницю додамо, коли будемо працювати з порядком результату) і відкинути всі знаки після коми окрім перших двадцяти трьох.
4 РОЗРАХУНКОВА ЧАСТИНА
4.1 Представлення чисел в пам’яті комп’ютера
Запишемо своє прізвище, ім’я, по-батькові без пробілів.
Lutsyuk Taras Ihorovich
Візьмемо перші 16 символів із цієї послідовності і отримаємо послідовність символів Lutsyuk Taras. Замість кожного символу запишемо його молодшу цифру ASCII-коду.
L u t s y u k T a r a s
C 5 4 3 9 5 B 4 1 2 1 3
Розіб’ємо отриману послідовність на дві частини по 8 цифр в кожній:
9 5
4 3
C 5
1 3
1 2
B 4
Перше число – C 5 4 3 9 5
Друге число – B 4 1 2 1 3
Покажемо розміщення чисел в пам’яті комп’ютера. Берем по два символи кожного числа.
Запишемо адрес першого як <seg>:<offset> у вигляді другого числа.
B 4 1 2 : 1 3 C 5
Адрес другого числа отримаємо шляхом збільшення на 4 адреса першого числа.
B 4 1 2 : 1 3 C 9
Обчислимо фізичний адрес пам’яті розміщення першого і другого чисел за формулою <фіз.адреса>=<seg>*p + <offset> , де р=16.
(B 4 1 2)*1 6 + 1 3 C 5=F 8 D 5 1
(B 4 1 2)*1 6 + 1 3 C 9 = F 8 D 5 5
Переведемо дані числа в десяткову систему числення за формулою (1.3.4).
Переведемо перше число:
C 5 4 3 9 5 16 = 5*160+9*161+3*162+4*163+5*164+C*165 =
=5+144+768+16384+327680+12582912=12927893
Переведемо друге число:
B 4 1 2 1 316 = B*160+4*161+1*162+2*163+1*164+3*165=
=11+64+256+8192+65536+3145728=3219787
Переведемо дані шістнадцяткові числа в двійкову систему числення, замінивши кожен символ H-коду на 4 цифри двійкового коду.
Переведемо перше число:
C16 = 1100 516 = 0101 416 = 0100
316 = 0011 916 = 1001 516 = 0101
Отримаємо перше число: C 5 4 3 9 5 = 110001010100001110010101
Переведемо друге число:
B16 =1011 416 =0100 116 =0001
216 =0010 116 =0001 316 =0011
Отримаємо друге число: B 4 1 2 1 3= 101101000001001000010011
4.2 Арифметичні операції з двійковими числами
Для наступних операцій утворимо з вихідних чисел двійкові числа з нульовим старшим бітом. У першому числі старший біт дорівнює 0 тому нічого не змінюємо. У другому числі старший біт дорівнює 1 тому замінимо його на 0. Отримаємо:
а1 = 1100010101000011100101012
а2 = 1011010000010010000100112
Виконаємо додавання (віднімання) двійкових чисел в додатковому коді при всіх можливих сполученнях знаків. Представимо числа в додатковому коді за формулою:
А, якщо число додатне
Адодаткове = (4.2.1)
Аобернене+1, якщо число від’ємне
Після переведення чисел отримаємо:
+а1 = 1100010101000011100101012
+а2 = 1011010000010010000100112
-а1= 0011101010111100011010112
-а2= 0100101111101101111011012
Виконаємо додавання а1+а2
110001010100001110010101
+
101101000001001000010011
1011110010101010110101000
Виконаємо дію а1-а2=а1+(-а2)
110001010100001110010101
+
010010111110110111101101
1000100010011000110000010
Виконаємо дію а2-а1=а2+(-а1)
101101000001001000010011
+
001110101011110001101011
111011101100111001111110
Виконаємо дію -а1-а2=-а1+(-а2)
001110101011110001101011
+
010010111110110111101101
100001101010101001011000
Виконаємо перевірку отриманих результатів. Додамо і віднімемо числа а1 і а2 при всіх можливих сполученнях знаків в десятковій системі числення.
а1 = 1292789310
а2 = 1180110710
Виконаємо дію а1+а2 = 12927893+11801107=24729000.
Результат переведемо в двійкову систему числення і запишемо його у
додатковому коді:
2472900010 = 10111100101010101101010002
Даний результат суми чисел +а1 і +а2 в додатковому коді співпав з результатом отриманим додаванням цих чисел в десятковій системі числення
Виконаємо дію а1- а2= 12927893 –11801107= 1126786
Результат переведемо в двійкову систему числення і запишемо його у додатковому коді:
112678610 = 1000100110001100000102
Виконаємо дію а2 – а1 = 11801107 – 12927893= -1126786
Результат переведемо в двійкову систему числення і запишемо його в додатковому коді:
-112678610 = 1110111011001110011111102
Даний результат співпав з додатковим кодом різниці чисел +а1 – а2, отриманий швидше.
Виконаємо дію –а2 – а1 = –11801107 –12927893 =-24729000.
Результат переведемо в двійкову систему числення і запишемо його в додатковому коді :
-2472900010 = 1000011010101010010110002
4.3 Десяткові числа в упакованому і неупакованому форматах
Переведемо числа а1 і а2 в десяткову систему числення.
а1 = 1292789310
а2 = 1180110710
Запишемо числа в запакованому форматі.
Число +а1 в запакованому форматі має вигляд:
0 0000 | 1100 | 1100 | 0101 | 0100 | 0011 | 1001 | 0101
, де молодша тетрада 11002 = С16 старшого байта – знак плюс. Тетради решта байтів– цифри числа.
Число +а2 в запакованому форматі має вигляд:
0000 | 1100 | 1011 | 0100 | 0001 | 0010 | 0001 | 0011
, де молодша тетрада 11002 = С16 старшого байта – знак плюс. Тетради решта байтів– цифри числа.
Число –а1 в запакованому форматі має вигляд:
0 0000 | 1100 |