Подання чисел в пам’яті комп’ютера

Числа в пам'яті комп'ютера

Існують два способи представлення чисел в пам'яті ЕОМ. Вони називаються так: форма з фіксованою точкою і форма з плаваючою точкою. Форма з фіксованою крапкою застосовується до цілих чисел, форма з плаваючою точкою - до речових числах (цілим і дробовим). Під точкою тут мається на увазі знак-роздільник цілої та дробової частини числа.

Цілі негативні числа.

Розберемося, як представляються негативні числа. Здавалося б, для цього досить замінити 0 на 1 в старшому (31-м) розряді осередки пам'яті. Однак реально це робиться трохи складніше. Для представлення негативних цілих чисел використовується додатковий код.

Додатковим кодом двійкового числа X в N-розрядної осередку є число, яке доповнює його до значення 2.

    Отримати додатковий код можна наступним шляхом:
  1. записати внутрішнє уявлення позитивного числа X;
  2. записати зворотний код цього числа заміною у всіх розрядах 0 на 1 і 1 на 0;
  3. до отриманого числа додати 1.
    Визначимо за цими правилами внутрішнє уявлення числа -562810 в 32-розрядної осередку.
  1. Шістнадцяткова форма результату:

    Старший розряд в поданні будь-якого негативного числа дорівнює 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 в формі з плаваючою крапкою.
    1. Переведемо його в двійкову систему числення з 24 значущими цифрами. 25,32410 = +11001,01010010111100011012
    2. Запишемо в формі нормалізованого двійкового числа з плаваючою точкою: +0,110010101001011110001101 * 10 101 Тут мантиса, підстава системи числення (210 = 102) і порядок (510 = 1012) записані в двійковій системі.
    3. Обчислимо машинний порядок. МР2 = 101 + 100 0000 = 100 0101
    4. Запишемо подання числа в комірці пам'яті.

    Це і є шуканий результат. Його можна переписати в більш компактній шестнадцатеричной формі:

    Для того, щоб отримати внутрішнє уявлення негативного числа -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-му розряді). А оскільки числа мають похибки, то і результати обчислень з цими числами також будуть містити похибку. Зі сказаного випливає висновок: обчислення з числами в комп'ютері виконуються наближено.

    Запитання і завдання

    1. Що таке форма з фіксованою точкою? Для подання будь чисел в комп'ютері вона використовується?
    2. Як в формі з фіксованою точкою представляються цілі позитивні і негативні числа?

    Сайт управляється системою uCoz