Нерухома комаВ інформатиці, число з нерухомою комою (англ. fixed-point number) — це представлення дійсного числа, що має фіксовану кількість чисел після (іноді перед) відокремлювальної коми. Представлення з нерухомою комою можна порівняти зі складнішим (і вимогливішим до обчислень) представлень з рухомою комою. Числа з нерухомою комою корисні для подання дробових чисел, зазвичай з основою 2 або 10, коли центральний процесор не має математичного співпроцесора (англ. floating point unit, FPU) або нерухома кома має покращену швидкодію або точність. Найдешевші вбудовані мікропроцесори та мікроконтролери не мають співпроцесора. ПредставленняЗначення в форматі нерухомої коми по суті цілочисельне змасштабоване на певний множник визначений типом. Наприклад, значення 1,23 можна подати як 1230 з множником 1/1000, також значення 1230000 можна представити як 1230 з множником 1000. На відміну від типів з рухомою комою, множник один і той самий для типу і не змінюється під час обчислень. Зазвичай множник це ступінь 10 (для зручності сприймання людиною) або ступінь 2 (для швидкості обчислень). Однак, іноді можуть використовуватись й інші значення, наприклад, час можна представити як тип з нерухомою точкою із множником 1/3600 з ціллю обчислення значень з точністю до секунди. Найбільше значення типу з нерухомою комою — це просто найбільше значення, яке може бути представлене підлеглим цілочисельним типом, помножене на множник; так само для найменшого значення. Наприклад, розглянемо тип з нерухомою комою представлений як двійкове ціле з b бітами в доповняльному коді, з множником 1/2f (що значить, останні f бітів складають дробові біти): найменше можливе для представлення значення — −2b-1/2f, а найбільше — (2b-1−1)/2f. Застосування
Недолік нерухомої коми — дуже вузький діапазон чисел, з загрозою переповнення на одному кінці діапазону та втрати точності обчислень на іншому. Ця проблема призвела до винаходу рухомої коми. Наприклад: якщо потрібна точність у 3 значущих цифрах, 4-байтова кома фіксована дає діапазон в 6 порядків (тобто, різниця приблизно 106 між найбільшим і найменшим числом), 4-байтове число одинарної точності — в 70 порядків. РеалізаціїДеякі мови програмування надають вбудовану підтримку чисел з фіксованою комою, оскільки для більшості застосувань двійкове або десяткове представлення чисел з рухомою комою простіше і досить точно. Числа з рухомою комою простіше використовувати через їх більший динамічний діапазон, для них не потрібно попередньо задавати кількість цифр після коми. Якщо ж буде потрібно арифметиці з фіксованою комою, вона може бути реалізована програмістом навіть на мовах типу C і C++, які зазвичай не включають в себе такої арифметики. Числа з нерухомою комою у форматі BCD часто використовуються для зберігання грошових величин — неточності від форматів з рухомою комою неприпустимі, а простенькі мікроконтролери платіжних терміналів BCD кращі за двійкове подання. Історично, числа з нерухомою комою часто використовувалися для десяткових типів даних, наприклад у мовах PL/I і COBOL. Мова програмування Ada 2012 включає вбудовану підтримку чисел з нерухомою комою (як двійкових, так і десяткових чисел з рухомою комою. JOVIAL і Coral 66 надавали обидва формати. Стандарт ISO/IEC TR 18037 додає підтримку чисел з фіксованою комою в мову C. Розробники компілятора GCC вже реалізували цю підтримку. Практично всі СУБД і мова SQL підтримують арифметику з фіксованою комою і зберігання таких даних. Наприклад, PostgreSQL має спеціальний чисельний тип для точного зберігання чисел до 1000 цифр. Відео-співпроцесори приставок PlayStation (Sony), Saturn (Sega), Game Boy Advance (Nintendo), Nintendo DS, GP2X [ru] використовують арифметику з фіксованою комою для того, щоб збільшити пропускну здатність на архітектурах без FPU. Стандарт OpenGL ES 1.x включає підтримку чисел з фіксованою комою, так як він створений для вбудованих систем, у яких часто немає FPU. Операції
=
де [ ] — операція округлення до цілого. Зокрема, якщо в дробовій частині f біт:
Якщо операнди і результат мають різну ціну (вагу) молодшого розряду, формули більш складні — але іноді доводиться робити через велику різницю в порядку величин. Для переведення чисел із формату з нерухомою комою у звичайний формат і навпаки застосовуються звичайні правила переведення десяткових чисел з однієї позиційної системи числення в іншу. Посилання
|