Львів
C
» » Що таке числа з плаваючою комою?

Що таке числа з плаваючою комою?

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


Що таке числа з плаваючою комою?

Крапка або кома

Докладного списку Decimal separator вказані ті англомовні і англофицированние країни, де в записах чисел дробова частина відокремлюється від цілої частини точкою, і тому термінологією цих країн прийнято назву floating point - "плаваюча крапка". У Російській Федерації дробову частину від цілої за традицією відокремлюється комою, тому означає це ж поняття історично визнаний термін "числа з плаваючою комою". Тим не менш, сьогодні в технічній документації і в російськомовній літературі цілком допускаються обидва ці варіанти. Термін "числа з плаваючою комою" походить від того, що позиційне подання числа представляє кому (звичайну десяткову або двійкову - комп'ютерну), яка може поміститися де завгодно серед цифр рядка. Таку її особливість обов'язково обумовлюють окремо. Це означає, що представлення чисел з плаваючою комою можна розглядати як комп'ютерну реалізацію експоненційної запису числа. Перевагою використання такого подання над виставою формату з фіксованою комою і цілими числами в тому, що діапазон значень приростає істотно при тому, що відносна точність залишається незмінною.


Приклад

Якщо кома в числі фіксована, то записати його можна тільки одним форматом. Наприклад, дано шість розрядів цілого в числі і два розряди дробової частини. Це можна зробити тільки таким чином: 12345678. Формат чисел з плаваючою комою дає повний простір для вираження. Наприклад, дані ті ж самі вісім розрядів. Варіантів запису може бути скільки завгодно, якщо програміст не манкірує обов'язком завести двухразрядное додаткове поле, де буде записувати показники ступеня, які зазвичай 10 від 0 до 16 а розрядів при цьому загальним числом буде десять: 8+2. Деякі варіанти запису, що дозволяє формат чисел з плаваючою комою: 12345678000000000000; 00000012345678; 12345678; 12345678 і так далі. У цього формату є навіть одиниця вимірювання швидкості! Вірніше, швидкодії обчислювальної системи, яка фіксує швидкість, з якою комп'ютер виконує операції, де є представлення чисел з плаваючою комою. Вимірюється це швидкодію в одиницях FLOPS (floating-point operations per second, що перекладається як кількість операцій в секунду з числами з плаваючою комою). Ця одиниця є основною у вимірюванні швидкості обчислювальної системи.
Що таке числа з плаваючою комою?

Структура

Записати числа у форматі з плаваючою коми потрібно таким чином, дотримуючись послідовність обов'язкових частин, оскільки ця запис є експоненціальною, де представлені дійсні числа як мантиса і порядок. Це необхідно для подання занадто великих і дуже малих чисел, їх набагато зручніше читати. Обов'язкові частини: записуване число (N), мантиса (M), знак порядку (p) і порядок (n). Два останніх знака утворюють характеристику числа. Значить, N = M . n p . Так записуються числа з плаваючою комою. Приклади будуть різноманітні.
1. Потрібно записати числом один мільйон так, щоб не заплутатися в нулях. 1000000 - це нормальна запис, арифметична. А комп'ютерна виглядає так: 10 . 10 6 . Тобто, десять шостого ступеня - три знака, які помістилися цілих шість нулів. Таким чином і відбувається представлення чисел з фіксованою і плаваючою комою, де відразу ж можна виявити відмінності в написанні. 2. А таке важке число, як 1435000000 (один мільярд чотириста тридцять п'ять тисяч) теж просто може бути записано: 1435 . 10 9 всього лише. Так само і зі знаком мінус можна записати будь-яке число. Ось цим і відрізняються один від одного числа з фіксованою і плаваючою комою. Але це великі числа, як бути з малими? Так теж легко. 3. Наприклад, як позначити одну мільйонну? 0000001 = 10 . 10 -6 . Значно полегшуються і написання числа, і його прочитання. 4. А складніше? П'ятсот сорок шоста мільярдна: 0000000546 = 546 . 10 -9 . Ось. Діапазон подання чисел з плаваючою комою дуже широкий.
Що таке числа з плаваючою комою?

Форма

Форма числа може бути нормальною або нормалізованої. Нормальна - завжди дотримується точність чисел з плаваючою комою. Потрібно відзначити, що мантиса в цій формі, не враховуючи знак, знаходиться на половині інтервалу: 0 1 значить, 0 ? a < 1. Не в нормальной форме число свою точность теряет. Недостатком нормальной форми числа является то, что многие числа можно записивать разними способами, то есть неоднозначно. Пример разной записи одного и того же числа: 0,0001 = 0, 000001 . 10 2 = 000001 . 10 1 = 00001 . 10 0 = 0001 . 10 -1 = 001 . 10 -2 і так можна ще багато. Саме тому в інформатиці використовується інша, нормалізована форма запису, де мантиса десяткових чисел приймає значення від одиниці (включно) і таким чином до десяти (не включно), і таким же чином мантиса двійкових чисел приймає значення від одиниці (включно) до двійки (не включно).
Отже, 1 ? a < 10. Ето - двоичние числа с плавающей запятой, и данная форма записи любое число (кроме ноля) фиксирует единственним образом. Но тоже есть недостаток - невозможность в этом виде представить ноль. Поэтому информатикой предусматривается для числа 0 употребление специального признака (бит). Целая часть числа (старший разряд) мантисси в двоичном числе кроме нуля в нормализованной форме равна 1 (неявная единица). Такая запись используется стандартом IEEE 754. Позиционние системи счисления, где основание больше двух (троичная, четверичная и другие системи), это свойство не приобрели.
Що таке числа з плаваючою комою?

Речові числа

Речові числа з плаваючою комою зазвичай і бувають, оскільки це не єдиний, але дуже зручний спосіб подання дійсного числа, як би компроміс між діапазоном значень і точністю. Це аналог експоненційної запису, тільки виконаною в комп'ютері. Число з плаваючою комою - набір з окремих двійкових розрядів, разделяющихся на знак (sign), порядок (exponent) і мантиссу (mantis). Найпоширеніший формат IEEE 754 представляє число з плаваючою комою як набір бітів, які кодують однією своєю частиною мантиссу, іншою частиною - ступінь, і одним бітом вказується знак числа: нуль - це якщо воно позитивне, одиниця - якщо число від'ємне. Весь порядок записується цілим числом (код зі зсувом), а мантиса - в нормалізованої формі, її дробова частина - в двійковій системі. Кожен знак - це один біт, що вказує знак для повністю числа з плаваючою точкою. Мантиса і порядок - цілі числа, вони вкупі зі знаком і роблять подання числа з плаваючою комою. Порядок можна називати експонентою або показником ступеня. Далеко не всі речові числа можна представити в комп'ютері у їхньому точному значенні, інші ж представляються наближеними значеннями. Набагато більш простий варіант - представити дійсне число з фіксованою точкою, де речова і ціла частини будуть зберігатися окремо. Найімовірніше, таким чином, щоб цілої частини завжди відводилося Х біт, а дробової - Y біт. Але архітектури процесорів не знають такого способу, а тому перевага віддається числа з плаваючою комою.
Що таке числа з плаваючою комою?

Додавання

Додавання чисел з плаваючою комою досить просто. У зв'язку зі стандартом IEEE 754 одинарна точність числа має величезну кількість біт, тому краще відразу переходити до прикладів, причому краще взяти найменшу подання числа з плаваючою комою. Наприклад, два числа - X і Y.

Змінна



Знак



Експонента



Мантиса



X



0



1001



110



Y



0



0111



000

Кроки будуть наступними: а) Числа потрібно подати до нормованому вигляді. Явно видається прихована одиниця. Х = 1110 . 2 2 , а Y = 1000 . 2 0 . б) Продовжити процес складання можна, тільки зрівнявши експоненти, а для цього потрібно переписати значення Y. Воно буде відповідати значенню нормалізованого числа, хоча фактично - денормализуется. Обчислити різницю експонент ступеня 2 - 0 = 2. Тепер зрушити мантиссу для компенсації цих змін, тобто додати 2 до показника другого доданку, зсунувши таким чином кому прихованої одиниці на два пункти вліво. Виходить 00100 . 2 2 . Це і буде еквівалент раніше значенням Y, тобто вже Y'. в) Тепер потрібно скласти мантиси числа Х і скоригованого Y. 1110 + 001 = 100 Експонента все ще дорівнює представленому показником Х, яка дорівнює 2. г) Сума, отримана на попередньому етапі, змістила одиницю нормалізації, значить, потрібно зрушити експоненту і підсумовування повторити. 100 з двома бітами ліворуч від коми, тепер потрібно нормалізувати, тобто, перемістити кому вліво на один пункт, а експоненту відповідно збільшити на 1. Виходить 1000 . 2 3 . д) Прийшла пора конвертувати число з плаваючою комою в однобайтную систему.

Сума



Знак



Експонента



Мантиса



X + Y



0



1010



000

Висновок

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

Множення

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

Деякі пояснення

Почати краще спочатку. Найпоширеніший шлях подання числа - рядком цифр як ціле число, де кома розуміється в самому кінці. Рядок ця може бути хоч якої довжини, а кома стоїть в самому потрібному для неї місці, відокремлюючи ціле число від дробової частини його. Формату подання числа з фіксованою комою система обов'язково ставить певні умови щодо місця розташування коми. Експоненціальна запис користується стандартним нормалізованим видом подання чисел. Це a q n {displaystyle aq^{n}} aq n . Тут {displaystyle a} a і називається це мереживо мантиссой. Якраз про це було сказано, що 0 ? a < q. Далее всё должно бить уже понятно: n {/displaystyle n} n - ціле, показник ступеня, а q {/displaystyle q} q - теж ціле, що є основою цієї системи числення (а в листі це частіше всього 10). Мантиса кому залишить після першої ж цифри, яка не нуль, а от далі по запису передається інформація про теперішньому значенні числа. Число з плаваючою комою дуже схоже записується на всім зрозумілу стандартну запис чисел, тільки експонента і мантиса записані окремо. Остання до того ж і в нормалізованому форматі з фіксованою комою, яка прикрашає першу значущу цифру. Просто плаваюча кома використовується в основному в комп'ютерному, тобто в електронному поданні, де система не десяткова, а двійкова, де навіть мантиса денормализована переставлением коми - тепер вона перед першою цифрою, значить, до, а не після неї, там, де цілої частини в принципі не може бути. Наприклад, наша рідна десяткова система віддасть свою дев'ятку двійковій системі на тимчасове користування. А та і запише її мантиссой з плаваючою комою ось так: +10010000 а до неї і показник +00100. Зате десяткова система не зможе виробляти такі складні обчислення, які можливі в двійковій, використовуючи форму з плаваючою комою.
Що таке числа з плаваючою комою?

Довга арифметика

В електронних обчислювальних машинах є вбудовані програмні пакети, де виділений під мантиссу і показник ступеня обсяг пам'яті заданий програмно, обмежуючись лише величиною пам'яті ЕОМ. Так виглядає довга арифметика, тобто прості операції над числами, які виконує обчислювальна машина. Це все ті ж - віднімання і додавання, ділення і множення, елементарні функції та зведення в корінь. Але тільки числа зовсім інші, їх розрядність може значно перевищувати довжину машинного слова. Реалізація таких операцій відбувається не апаратним шляхом, а програмним, але широко використовуються базові апаратні засоби в роботі з числами значно менших порядків. Існує ще й арифметика, де довжина чисел обмежується єдино об'ємом пам'яті - довільної точності арифметика. А довгу арифметику застосовують у багатьох областях. 1. Для складання коду (процесори, мікроконтролери з низькою розрядністю - в 10 біт і восьмибитними регістрами розрядності, цього явно недостатньо, щоб обробляти інформацію з Analog-to-digital (Аналого-цифровий перетворювач), а тому не обійтися без довгої арифметики. 2. Також довга арифметика використовується для криптографії, де потрібно забезпечення точності результату зведення у ступінь або множення до 10 309 . Цілочисельна арифметика використовується по модулю m - великого натурального числа, і зовсім не обов'язково простого. 3. Програмне забезпечення для фінансистів і математиків теж не обходиться без довгої арифметики, тому що тільки так можна звірити результати обчислень на папері - з допомогою комп'ютера, забезпечуючи високу точність чисел. Плаваючою комою вони можуть залучати скільки завгодно довгу розрядність. А ось інженерні розрахунки і робота вчених досить рідко вимагають втручання програмних обчислень, тому що дуже складно внести вхідні дані, не припустившись помилок. Зазвичай вони набагато об'ємніше, ніж результати округлення.

Боротьба з похибками

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