Формати даних

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук

Форма́ти да́них — сукупність регламентованих в архітектурі ЕОМ структур для представлення різних за специфікою обробки та представлення видів інформації (цілих чисел, дробових чисел, текстових рядків тощо).

В ЕОМ інформація різного характеру представляється двійковими послідовностями з різним числом розрядів. Окремі частини цих послідовностей мають певні призначення, причому для фон-ноймановских машин ці призначення набувають сенсу тільки в контексті виконуваних команд. Поза цим контекстом і дані, і команди — усього лише послідовності двійкових розрядів, зовсім нерозрізнених за формою подання. Однак в якості операндів при виконанні команди, різні розряди цих послідовностей наділяються певним змістом. Тому говорять, що у фон-ноймановских машинах типи даних визначаються не самими даними, а операцією, що над ними виконується. І якщо, наприклад, в регістри-джерела операндів команди арифметичного додавання раптом виявилися завантажені розряди слова, яке містить якийсь текст, а не числа, то фон-нойманівська ЕОМ просто проігнорує ту обставину, що навряд чи має сенс додавати два текстові рядки, і поведетьтся з ними як з числами. Але це зовсім не зменшує важливості форматів даних у фон-нейманівских машинах, адже специфіка виконання тих чи інших машинних команд визначається тим форматом даних, над яким вони діють (інша справа, що фактичні операнди можуть не відповідати цьому форматові, але це вже на відповідальності програміста). Вся безліч операцій, а за ними й формати даних, можна розбити на дві великих групи: цілочисельні формати й формати для чисел із плаваючою комою.

Цілочисельні формати[ред.ред. код]

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

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

Як приклад, в таблиці наведена номенклатура цілочисельних типів 64-розрядної архітектури SPARC v9.

Основною характеристикою цілочисельних форматів при виконанні арифметичних операцій, є діапазон представлень чисел, що прямо залежить від розрядності формату:

  • для беззнакових форматів: 0≤i≤2b-1
  • для форматів з врахуванням знаку: −2b-1≤i≤2b-1-1

Тут b — кількість інформаційних бітів в даному форматі.

Назва формата SPARC v9 Розрядність Діапазон
Байт зі знаком 8(7+1) −27…27-1
Півслово зі знаком 16(15+1) −215…215-1
Слово зі знаком 32(31+1) −231…231-1
Подвійне слово зі знаком 64(63+1) −263…263-1
Байт без знака 8 0…28-1
Беззнакове півслово 16 0…216-1
Беззнакове слово 32 0…232-1
Беззнакове подвійне слово 64 0…264-1

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

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

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

У двійково-десятковому форматі кожна десяткова цифра кодується двійковим кодом і числа записуються спеціальним образом. Для кодування однієї з 10 цифр використовується 4 двійкових розряди.

Формати з плаваючою комою[ред.ред. код]

Формат із плаваючою комою використовується для представлення дробових або дійсних чисел.

У форматі із плаваючою комою число N представляється в наступному виді:

N=m×qp

де m — мантиса (mantissa, significand), p — порядок, q — основа системи числення.

Число у формі із плаваючою комою може бути представлене безліччю способів: 2=20×10-1=0.2×101=0.002×103 і т. д. Для однозначного представлення на мантису накладається обмеження:

q-1≤|m|<1 ,

при дотриманні якого число знаходиться в нормалізованій формі.

Різноманіттю форматів для представлення чисел із плаваючою коми був покладений кінець із введенням стандарту IEEE 754 на обчислення із плаваючю комою, обов'язково присутнього у всіх сучасних ЕОМ загального призначення. Основні формати IEEE 754 зведені в таблицю. З перерахованих, у сучасних процесорах відповідно до рекомендацій IEEE 754 реалізовані формати з одинарною й подвійною точністю. Точніші формати в кожній архітектурі мають свої особливості реалізації.

Параметр З одинарною точністю З одинарною точністю розширений З подвійною точністю З подвійною точністю розширений
Розрядність мантиси (зі знаком), n 24 32 53 64
pmax 127 1023 1023 >16383
pmin −127 ≤−1023 −1023 ≤−16382
Розрядність порядка 8 ≤11 11 15
Розрядність формата 32 43 64 79(80)

Векторні формати[ред.ред. код]

В зв'язку з розвитком технологій мультимедиа, в сучасні процесори почали інтегруватись засоби векторної обробки (хоча векторні процесори як такі відомі досить давно, але застосовувались до цього, як правило, лише в спеціалізованих ЕОМ). Векторні команди можуть оперувати словами високої розрядності (16 байт і вище), в які «упаковані» декілька цілочисельних або дробових операндів стандартного формату. Так, наприклад, в 16-байтний формат можуть бути вкладені 4 4-байтні елементи формату IEEE 754 одинарної точності. Вони утворять чотирикомпонентний вектор, пара яких може бути, приміром, просумована поелементно спеціальною командою додавання векторів.

Див. також[ред.ред. код]