Теорія операційної системи

:: Меню ::

Головна
Представлення даних в обчислювальних системах
Машинні мови
Завантаження програм
Управління оперативною пам'яттю
Сегментна і сторінкова віртуальна пам'ять
Комп'ютер і зовнішні події
Паралелізм з точки зору програміста
Реалізація багатозадачності на однопроцесорних комп'ютерах  
Зовнішні пристрої
Драйвери зовнішніх пристроїв
Файлові системи
Безпека
Огляд архітектури сучасних ОС

:: Друзі ::

Карта сайту
 

:: Статистика ::

 

 

 

 

 

Представлення раціональних чисел

  — Чому дорівнює кінська сила?
— Це сила коня вагою один кілограм і зростанням один метр
—Та де ж ви бачили такого коня?
— А її взагалі мало хто бачив. Вона зберігається під аргоновий ковпаком в Палаті мір і вагів під Парижем.

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

Примітка
Насправді, можливе точне, а не наближене представлення дійсних чисел раціональними — не одиночним дробом, а безконечною послідовністю дробів, що сходиться, так зване Гільбертове перетин. Кінцевою виставою служить не сама послідовність, а правило її формування. Із-за своєї складності така вистава украй рідко використовується в обчислювальних системах і ніколи не реалізується апаратний.

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

Мал. 1.3. Число з двійковою фіксованою крапкою

Примітка
У російській мові прийнято називати роздільник цілої і дробової частин позиційного дробу коми, а в англійському — крапкою. Сучасна обчислювальна термінологія формувалася англійською мовою, і англійські словосполуки fixed-point і floating-point часто перекладалися російською мовою буквально, тому словосполуки "фіксована крапка" і "плаваюча крапка" міцно увійшли до російської комп'ютерної лексики, і ми використовуватимемо саме їх.

Сучасні процесори зазвичай не надають арифметичних операцій з фіксованою крапкою, проте ніхто не забороняє програмістові або розробникові компілятора реалізувати такі операції на основі стандартних цілочисельних операцій і команд бітового зрушення.
Якщо нам необхідна точність обчислень, визначена кількістю десяткових знаків (наприклад, при підрахунку рублів з точністю до копійок), потрібно пам'ятати, що більшістю десяткових дробів в позиційному двійковому записі є періодичні (з безконечним числом знаків) дроби. Для забезпечення необхідної точності нам слід або мати додаткові двійкові позиції, або замість фіксованої двійкової використовувати фіксовану десяткову крапку: складати такі числа як і раніше можна за допомогою цілочисельних операцій, але корекцію множення і ділення необхідно виконувати за допомогою множення (ділення) на міру десяти, а не на міру двійки.
У наукових і інженерних обчисленнях і цифровій обробці сигналів ширше застосовуються числа з плаваючою двійковою крапкою. Річ у тому, що вихідні дані для таких обчислень зазвичай є результатами вимірів фізичних величин. Всі способи вимірів, що фізично реалізовуються, супроводяться помилками: для пояснення цього сумного факту часто посилаються на принцип невизначеності Гейзенберга [Карнап 1971], але при практичних вимірах набагато більшу роль грають наступні види помилок.

  1. 1. Теплові шуми — температурні коливання вимірюваного об'єкту і вимірювального інструменту.
  2. 2. Інструментальні погрішності, обумовлені різними помилками при виготовленні або калібруванні інструменту або зміною його параметрів з моменту останнього калібрування, наприклад, за рахунок механічного зносу.
  3. 3. Методологічні помилки, обумовлені не лише невмінням користуватися
  4. інструментом, але і тим фактом, що наші інструменти не мають безпосереднього контакту з явищем, яке ми хочемо виміряти: наприклад, вимірюючи динаміку валового внутрішнього продукту, ми, насправді, вимірюємо також і ефекти, обумовлені динамікою грошової маси. Можлива і зворотна ситуація, коли наш інструмент має дуже тісний контакт з вимірюваним об'єктом і спотворює його поведінку. З шкільного курсу фізики відомі такі джерела методологічних помилок, як падіння напруги на вольтметрі або внутрішній опір амперметра.

Якщо з принципом Гейзенберга боротися неможливо, то теплові і інструментальні помилки можна зменшувати, перші — зниженням температу-pbi, а другі — більшою ретельністю виготовлення і калібрування, посилюванням умов експлуатації і зберігання або вдосконаленням самого інструменту (наприклад, інтерферометричний лазерний далекомір при рівній ретельності виготовлення буде набагато точніший за рулетку).
Проте ні абсолютний нуль температури, ні абсолютна точність виготовлення фізично недосяжні, і навіть наближення до них в більшості ситуацій неприпустимо дорого.
Читачеві, що сумнівається в цьому твердженні, пропонується представити, на що б перетворилося його життя, якби при зважуванні продуктів в магазині самі продукти і ваги охолоджувалися хоч би до температури рідкого азоту, а теслярський метр треба було б зберігати з тими ж обережностями, що і метрологічний еталон.
Тому на практиці доцільно змиритися з погрішностями вимірів, а на приладі вказати точність, яку його виготівник реально може гарантувати при дотриманні користувачем умов зберігання і експлуатації. Повному викорінюванню підлягають лише методологічні помилки, та і з ними в багатьох ситуаціях доводиться змиритися із-за неприйнятний високої вартості прямих вимірів.
Відносно дешевий спосіб підвищення точності — багатократні виміри і усереднювання результату, але цей метод підвищує вартість вимірів і, якщо виміри проводяться одним і тим же інструментом, не дозволяє усунути інструментальні і методологічні помилки.
І теплові шуми, і інструменти породжують помилки, які за інших рівних умов пропорційні вимірюваній величині. Десяти метрова рулетка має інструментальну помилку, вимірювану міліметрами, а десятисантиметровий штангенциркуль — мікронами. Тому помилку вимірів часто вказують не в абсолютних одиницях, а у відсотках.
При записі результатів вимірів хорошим тоном вважається вказувати точність цих вимірів і не виписувати десяткові цифри (або знаки після коми), значення яких лежать усередині кордонів помилки. Цифри перед десятковою комою в цьому випадку замінюються нулями, а після неї -просто відкидаються. Для скорочення запису великих значень, виміряних з відносно невеликою точністю, в науковій і інженерній літературі використовується експоненціальний запис чисел: незначущі (в даному випадку — лежачі усередині кордонів помилки) молодші десяткові цифри відкидаються, і після числа додається 10N де N — кількість відкинутих цифр. Зазвичай рекомендують нормалізувати такий запис, переміщаючи десяткову кому на місце після старшої цифри (зсув коми на одну позицію вліво відповідає збільшенню показника міри множника на одиницю). Відповідно до цих правил величина 2128506 ± 20 перетвориться до вигляду 2,12850х106 (звернете увагу, що молодший нуль в даному випадку є значущим).
При побутових вимірах зазвичай обходяться двумя-тремя значущими десятковими цифрами. У наукових і інженерних вимірах використовується і велика точність, але на практиці виміри з точністю вище за шостий десятковий знак зустрічаються хіба що при розробці і калібруванні метрологічних еталонів. Для порівняння, цифрова телефонія обходиться 8-у бітами, а аналого-цифровий перетворювач побутової звукової карти має 12, рідше 14 значущих двійкових розрядів. Більшість сучасних карт вважаються 16-бітовими, але на практиці молодші розряди їх АЦП оцифровують лише тепловий шум підсилювача і власних старших розрядів, а також помилки калібрування того і іншого. Чесні (тобто такі, в яких всі розряди значущі) 16-розрядні АЦП використовуються в професійній звукозаписній і вимірювальній апаратурі, 24-розрядні АЦП відносяться до прецизійної апаратури, а 32-розрядні на практиці не застосовують.
Обчислювальні системи широко використовують представлення чисел з плаваючою крапкою, лише не десятковою, а двійковою (мал. 1.4). Ідея цієї вистави полягає в тому, щоб нормалізувати позиційний двійковий дріб, позбавившись від незначущих старших нульових бітів і визволивши місце для [можливо] значущих молодших розрядів. Зрушення, яке потрібне для нормалізації, записується в бітове поле, зване порядком. Само ж число називається мантисою.

Мал. 1.4. Число з плаваючою двійковою крапкою

Число з плаваючою крапкою, таким чином, складається з двох бітових полів — мантиси М-коду і порядку Е. Число, представлене двома такими полями, рівне Мх2Е. Нормалізація полягає у відкиданні всіх старших нулів, тому старший біт нормалізованої двійкової мантиси завжди дорівнює 1. Більшість сучасних реалізацій чисел з плаваючою крапкою використовують цей факт для того, щоб оголосити незначущими не лише старші нулі, але і цю одиницю, і, таким чином, виграють додатковий біт точності мантиси.
Складання двох чисел з плаваючою крапкою полягає в денормалізації мантис (поєднанні двійкових крапок), їх складанні і нормалізації результату. Перемножування таких чисел, відповідно, виконується перемножуванням мантис, складанням порядків і знову-таки нормалізацією результату.
У деякій старій архітектурі, наприклад БЕСМ-6, всі арифметичні операції виконувалися над числами з плаваючою крапкою, проте існувала можливість вимкнути нормалізацію мантиси. Ненормалізовані числа з плаваючою крапкою використовувалися для представлення значень з фіксованою крапкою, у тому числі і цілочисельних.
Стандарт мови ANSI З вимагає наявність 32-бітового (8-розрядний порядок і 24-розрядна мантиса) і 64-бітового (16-розрядний порядок і 48-розрядна мантиса) представлень чисел з плаваючою крапкою, які називаються, відповідно числами одинарної і подвійної точності (float і double float або просто double). Числа подвійної точності, звичайно ж, не можуть бути результатом прямих вимірів фізичних величин, але дозволяють уникнути накопичення помилок округлення при обчисленнях.
Більшість сучасних процесорів спільного призначення і орієнтованих на додатки цифрової обробки сигналів (ЦОС) надає операції над такими числами, а частенько і над числами більшої розрядності. Операції практично завжди включають складання, віднімання, множення і ділення. Часто на рівні системи команд реалізуються і елементарні функції: експонента, логарифм, квадратний корінь, синус, косинус і так далі Процессори ЦОС нерідко надають і окремі кроки дискретного перетворення Фур'є.
Кількість операцій з плаваючою крапкою в секунду (Floating Operations Per Second, FLOPS, у наш час чаші говорять про Mflops — мільйонах операцій в секунду), які може виконувати процесор, є одній з важливих його характеристик, хоча і не для всіх застосувань ця характеристика критична.


:: Реклама ::

 

:: Посилання ::


 

 

 


Copyright © Kivik, 2017