Дійсні типи

 

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

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

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

 

 
 

 


Введення характеристики звільняє від необхідності виділяти один біт для знака порядку, спрощує виконання операцій порівняння (<, >, ≤, ≥) і арифметичних операцій над дійсними числами. Так, при додаванні або відніманні чисел із рухомою точкою, для того, щоб вирівняти операнди, потрібен зсув вліво чи вправо мантиси числа. Зсув можна здійснити за допомогою єдиного лічильника, у який спочатку заноситься позитивне число, що зменшується доти, поки не буде виконане необхідне число зсувів. Таким чином, для представлення дійсних чисел у пам'яті ЕОМ порядок p дійсного числа представляється у вигляді характеристики шляхом додавання зсуву (старшого біта порядку):

Х = 2n– 1 + k + p,

де n – число бітів, відведених для характеристики,

p – порядок числа,

k – поправочний коефіцієнт фірми ІBM, що дорівнює + 1 для real та

– 1 для всіх інших форматів.

Наступним компонентом числа із рухомою точкою, що представляється в машині, є мантиса. Для збільшення кількості значущих цифр у представленні числа і виключення переповнення при множенні, мантису піддають нормалізації. Нормалізація означає, що мантиса (назвемо її F), крім випадку, коли F=0, повинна знаходитися в інтервалі [R– 1 ... 1). Таким чином виконується умова: R– 1 ≤ F < 1,

де R – основа системи обчислення.

Для двійкової системи обчислення R = 2. Тоді у зв'язку з тим, що

2– 1 ≤ F < 1,

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

Наведений метод нормалізації є класичним методом, при якому результат нормалізації представляється у вигляді правильного дробу, тобто з одиницею після точки і нулем у цілій частині числа. Але нормалізацію мантиси можна виконати по-різному. В ІBM PC нормалізована мантиса містить свій старший біт ліворуч від точки. Іншими словами нормалізована мантиса в ІBM PC належить інтервалу 1 ≤ F < 2. У пам'яті машини для даних, що потребують 4, 6, 8 байтів, цей біт не зберігається, тобто є "схованим" і використовується для збільшення порядку, наприклад, у форматах sіngle, double, та для збереження знака у форматі real. Для позитивних і негативних чисел нормалізована мантиса в пам'яті представлена в прямому коді.

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

Алгоритм формування машинного представлення дійсного числа в пам'яті ЕОМ:

1). Число представляється в двійковому коді.

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

3). Визначається характеристика.

При цьому необхідно відзначити наступне (див. табл. 2.5):

– для чисел типу real характеристика зберігається в молодшому байті пам'яті, для чисел типу sіngle, double, extended (PASCAL) і для всіх типів мови С – у старших байтах;

– знак числа знаходиться завжди в старшому біті старшого байта;

– мантиса завжди зберігається в прямому коді;

– ціла частина мантиси (для нормалізованого числа завжди дорівнює 1) для чисел типу real, sіngle, double не зберігається (є схованою). У числах типу extended (PASCAL) і long double (С) всі розряди мантиси зберігаються в пам'яті ЕОМ.

 

Таблиця 2.4

Характеристика дійсних типів

Розмір, (байт) Діапазон значень Тип Точність, (розрядів)
PASCAL C
2.9*10– 39…1.7*1038 1.4*10– 45…3.4*1038 4.9*10– 324…1.8*10308 3.1*10– 4944…1.2*104932 real single double extended float double long double 11– 12 7– 8 15– 16 19– 20

 

Таблиця 2.5

Розподіл розрядів для дійсних типів

Тип PASCAL / C Размір Схована одиниця Поправоч-ний коеф.
Загальний, байт Хар-ка, бiт Мантиса, бiт
real/ – single / float double / double extended/long double є є є немає + 1 – 1 – 1 – 1

 

ДАНІ ДIЙСНОГО ТИПУ, 6 БАЙТIВ. Формат машинного представлення: наступний:

мол. байт ст. байт

а: 7...0 15 ... 8 23 ... 16 31 ... 24 39 ... 32 47 46 ... 40

x ... x м ... м м ... м м ... м м ... м s м ... м

б: 7 0 – 32 – 39 – 24 – 31 – 16 – 23 – 8 – 15 – 1 – 7

де: а – номера розрядів пам'яті, s – знаковий розряд числа,

б – показники ступенів розрядів характеристики і мантиси,

м – нормалізована мантиса, х – характеристика числа.

Наприклад:

1). Десяткове число 15.375;

у двійковій системі обчислення 1111.011; результат нормалізації 1.111011*23; р = 3; s = 0; х = 27 + 1 + 3 = 27 + 22 = 132;

машинне представлення числа:

10000100 00000000 00000000 00000000 00000000 01110110

2). Десяткове число – 0.5; аналогічні викладення дають:

машинне представлення числа:

10000000 00000000 00000000 00000000 00000000 10000000

3). Числа верхньої та нижньої границь позитивного діапазону

~1.7*1038 – 11111111 11111111 11111111 11111111 11111111 01111111

~2.9*10– 35 – 00000001 00000000 00000000 00000000 00000000 00000000

ДАНІ ДIЙСНОГО ТИПУ, 4 БАЙТИ. Формат машинного представлення:

мол. байт ст. байт

7 ... 0 15 ... 8 23 22 ... 16 31 30 ... 24 – номера розрядів пам'яті

м ... м м ... м х м ... м s х ... х

– 16 – 23 – 8 – 15 0 – 1 – 7 7 1 – показники ступенів розрядів мантиси і характеристики

де: s – знаковий розряд, х – характеристика числа,

м – нормалізована мантиса.

Наприклад:

1). Число – 15.375; машинне представлення числа у форматі SІNGLE: 00000000 00000000 01110110 11000001

2). Значення верхньої та нижньої границь чисел негативного діапазону

~– 3.4*1038 – 11111111 11111111 01111111 11111111

~– .4*10– 45 – 00000001 00000000 00000000 10000000

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

ДАНІ ДIЙСНОГО ТИПУ, 10 БАЙТІВ.Формат машинного представлення:

мол. байт ст. байт

7 ... 0 15 ... 8 23 ... 16 31 ... 24 39... 32 47 ... 40 55...48 63...56 71...64 79 ... 72

м ... м м ... м м ... м м ... м м ... м м ... м м... м м ... м х... х s х ... х

– 56 – 63 – 48 – 55 – 40 –47 – 32 – 39 – 24 – 31 – 16 – 23 – 8 – 15 0 – 7 7 0 14 8

де: верхній рядок цифр – номера розрядів пам'яті;

нижній рядок цифр – показники ступенів розрядів мантиси і характеристики;

s – знаковий розряд числа; м – нормалізована мантиса;

х – характеристика числа.

Наприклад:

1). Число – 15.375;

у двійковій системі числення – 1111.011;

після нормалізації – 1.111011*23; р = 3.

Машинне представлення даного числа у форматі EXTENDED:

0..0 0..0 0..0 0..0 0..0 0..0 0..0 11110110 00000010 11000000

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

~1.2*104932 – ******** ******** 11111111 11111111 11111111

11111111 11111111 11111111 11111111 011111111

~3.1*10– 4944 – ******** ******** 00000001 00000000 000000000

00000000 00000000 00000000 00000001 000000000