Подання чисел в пам’яті комп’ютера
Числа в пам'яті комп'ютера
Існують два способи представлення чисел в пам'яті ЕОМ. Вони називаються так: форма з фіксованою точкою і форма з плаваючою точкою. Форма з фіксованою крапкою застосовується до цілих чисел, форма з плаваючою точкою - до речових числах (цілим і дробовим). Під точкою тут мається на увазі знак-роздільник цілої та дробової частини числа.
Цілі негативні числа.
Розберемося, як представляються негативні числа. Здавалося б, для цього досить замінити 0 на 1 в старшому (31-м) розряді осередки пам'яті. Однак реально це робиться трохи складніше. Для представлення негативних цілих чисел використовується додатковий код.
Додатковим кодом двійкового числа X в N-розрядної осередку є число, яке доповнює його до значення 2.
-
Отримати додатковий код можна наступним шляхом:
- записати внутрішнє уявлення позитивного числа X;
- записати зворотний код цього числа заміною у всіх розрядах 0 на 1 і 1 на 0;
- до отриманого числа додати 1.
-
Визначимо за цими правилами внутрішнє уявлення числа -562810 в 32-розрядної осередку.
-
Шістнадцяткова форма результату:
Старший розряд в поданні будь-якого негативного числа дорівнює 1. Отже, він вказує на знак числа і тому називається знаковим розрядом.
Чому негативні числа представляються в додатковому коді? Справа в тому, що в цьому випадку операція віднімання двох чисел зводиться до складання з додатковим кодом від'ємника, і процесору достатньо вміти лише складати числа. Справді:
Якщо значення (-В) матиме форму додаткового коду, то в пам'яті ЕОМ вийде правильний результат.
Перевіримо, чи дійсно в комірці пам'яті вийде Про в результаті складання числа 5628 з числом -5628 в формі додаткового коду.
00000000 00000000 00010101 11111100 + 11111111 11111111 11101010 000000100 =
1 00000000 00000000 00000000 00000000
Що й потрібно було довести! Одиниця в старшому розряді, що отримується при додаванні, виходить за кордон розрядної сітки машинного слова і зникає.
Двійкове 32-розрядне число 231 є «негативним самому собі». Отримаємо його додатковий код:
-
Визначимо за цими правилами внутрішнє уявлення числа -562810 в 32-розрядної осередку.
У загальному випадку для N-розрядного машинного слова цей діапазон такий:
У сучасних комп'ютерах часто використовується 16- розрядний уявлення цілих чисел. В цьому випадку їх діапазон наступний:
Вихід результатів обчислень за межі допустимого діапазону називається переповненням. Переповнення при обчисленнях з фіксованою точкою не викликає переривання роботи процесора. Машина продовжує вважати, але результати можуть виявитися неправильними.
Речові числа. Числові величини, які можуть приймати будь-які значення (цілі і дробові) називаються речовими числами. В математиці також використовується термін «дійсні числа». Рішення більшості математичних задач зводиться до обчислень з речовинний-ними числами. Як же такі числа представляються в пам'яті комп'ютера?
Речові числа в пам'яті комп'ютера представлені в формі з плаваючою крапкою.
Форма з плаваючою крапкою використовує уявлення дійсного числа R у вигляді твору мантиси m на підставу системи числення р в деякій цілій степені n, яку називають порядком:
Наприклад, число 25,324 можна записати в такому вигляді: 0.25324х102. Тут m = 0.25324 - мантиса, n = 2 - порядок. Порядок вказує, на скільки позицій і в якому напрямку повинна «переплисти», тобто зміститися десяткова точка в мантисі. Звідси назва «плаваюча точка».
Однак справедливі і наступні рівності:
25,324 = 2,5324 * 101 = 0,0025324 * 104 = 2532,4 * 102 і т.п.
Виходить, що уявлення числа в формі з плаваючою крапкою неоднозначно? Щоб не було неоднозначності, в ЕОМ використовують нормалізоване подання числа в формі з плаваючою крапкою. Мантиса в нормалізований-ном поданні повинна задовольняти умові:
Інакше кажучи, мантиса менше одиниці і перша значуща цифра - НЕ нуль. Значить для розглянутого числа нормалізованим поданням буде: 0.25324 * 102. У різних типах ЕОМ застосовуються різні варіанти представлення чисел у формі з плаваючою крапкою. Для прикладу розглянемо один з можливих. Нехай в пам'яті комп'ютера дійсне число представляється в формі з плаваючою крапкою в двійковій системі числення (р = 2) і займає осередок розміром 4 байта. В осередку повинна міститися наступна інформація про кількість: знак числа, порядок і значущі цифри мантиси. Ось як ця інформація розташовується в осередку:
nbsp nbsp nbsp nbsp М А
З Аnbsp nbsp nbsp
nbspnbspnbspnbspnbsp1-й байт nbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbsp 2-й байтnbspnbspnbsp 3-й байт nbsp 4-й байтnbspnbsp
У старшому бите 1-го байта зберігається знак числа. У цьому розряді 0 позначає плюс, 1 - мінус. Решта 7 біт першого байта містять машинний порядок. У наступних трьох байтах зберігаються значущі цифри мантиси.
Що таке машинний порядок? У семи довічних розрядах поміщаються двійкові числа в діапазоні від 0000000 до 1111111. У десятковій системі це відповідає діапазону від 0 до 127. Всього 128 значень. Знак порядку в осередку не зберігається. Але порядок, очевидно, може бути як позитивним так і негативним. Розумно ці 128 значень розділити порівну між позитивними і негативними значеннями порядку. У такому випадку між машинним порядком і дійсним (назвемо його математичним) встановлюється наступне відповідність:
Якщо позначити машинний порядок Мр, а математичний - р, то зв'язок між ними иразітся такою формулою:
Отже, машинний порядок зміщений відносно математичного на 64 одиниці і має тільки позитивні значення. При виконанні обчислень з плаваючою точкою процесор це зміщення враховує.
Отримана формула записана в десятковій системі. Оскільки 6410 = 4016 (перевірте!), То в шістнадцятковій системі формула набуде вигляду:
І, нарешті, в двійковій системі:
-
Тепер ми можемо записати внутрішнє уявлення числа 25,324 в формі з плаваючою крапкою.
- Переведемо його в двійкову систему числення з 24 значущими цифрами. 25,32410 = +11001,01010010111100011012
- Запишемо в формі нормалізованого двійкового числа з плаваючою точкою: +0,110010101001011110001101 * 10 101 Тут мантиса, підстава системи числення (210 = 102) і порядок (510 = 1012) записані в двійковій системі.
- Обчислимо машинний порядок. МР2 = 101 + 100 0000 = 100 0101
- Запишемо подання числа в комірці пам'яті.
Це і є шуканий результат. Його можна переписати в більш компактній шестнадцатеричной формі:
Для того, щоб отримати внутрішнє уявлення негативного числа -25,324, досить в отриманому вище коді замінити в розряді знака числа 0 на 1.
Ніякого инвертирования, як для негативних чисел з фіксованою точкою, тут не відбувається.
Розглянемо, нарешті, питання про діапазон чисел, які представлені в формі з плаваючою крапкою. Очевидно, позитивні і негативні числа розташовані симетрично відносно нуля. Отже, максимальна і мінімальна числа рівні між собою за модулем: Rmax = | Rmin |. Найменша за абсолютною величиною число дорівнює нулю. Чому ж так само Rmax? Це число з найбільшою мантиссой і найбільшим порядком:
Якщо перевести в десяткову систему, то вийде
Rmax = (1 - 2 -24) * 2 64 = 10 19
Очевидно, що діапазон дійсних чисел значно ширше діапазону цілих чисел. Якщо в результаті обчислень виходить число по модулю більше, ніж Rmax, то відбувається переривання роботи процесора. Така ситуація називається переповненням при обчисленнях з плаваючою крапкою. Найменша по модулю нульове значення одно:
Будь-які значення, менші даного по абсолютній величині, сприймаються процесором як нульові.
Як відомо з математики, безліч дійсних чисел нескінченно і безперервно. І багато дійсних чисел, які представлені в пам'яті ЕОМ у формі з плаваючою точкою, є обмеженим і дискретним. Кожне наступне значення виходить додатком до мантисі попереднього одиниці в останньому (24-м) розряді. Кількість дійсних чисел, точно представимо в па-мяти машини, обчислюється за формулою:
N = 2 t * (U - L + 1) + 1.
Тут t - кількість двійкових розрядів мантиси; U - максимальне значення математичного порядку; L - мінімальне значення порядку. Для розглянутого нами варіанти (t = 24, U = 63, L = -64) виходить:
N = 2 146 683 548.
Всі ж інші числа, але вони не попадають в це безліч, але знаходяться в діапазоні допустимих значень, представляються в пам'яті приблизно (мантиса обрізається на 24-му розряді). А оскільки числа мають похибки, то і результати обчислень з цими числами також будуть містити похибку. Зі сказаного випливає висновок: обчислення з числами в комп'ютері виконуються наближено.
Запитання і завдання
- Що таке форма з фіксованою точкою? Для подання будь чисел в комп'ютері вона використовується?
- Як в формі з фіксованою точкою представляються цілі позитивні і негативні числа?
Сайт управляється системою uCoz