Число з фіксованою комою
Число з фіксованою комою (англ. Fixed-point number) - формат подання дійсного числа в пам'яті ЕОМ у вигляді цілого числа. При цьому саме число x і його целочисленное уявлення x 'язані формулою
де z - ціна (вага) молодшого розряду.
Найпростіший приклад арифметики з фіксованою комою - переклад рублів в копійки. В такому випадку, щоб запам'ятати суму 12 рублів 34 копійки, ми записуємо в комірку пам'яті число тисячі двісті тридцять чотири.
У разі, якщо z <1 . для удобства расчётов делают, чтобы целые числа кодировались без погрешности. Другими словами, выбирают целое число u (машинную единицу ) и принимают z = 1 u>>. У разі, якщо z> 1. його роблять цілим.
Якщо ви не бажаєте, щоб будь-які конкретні дробові числа входили в розрядну сітку, програмісти зазвичай вибирають z = 2 - f> - це дозволяє використовувати в операціях множення і ділення бітові зрушення. Про таку арифметику кажуть: «f бітів на дробову частину, i = n-f - на цілу» і позначають як «i, f», «i .f» або «Qi.f». Наприклад: арифметика 8,24 відводить на цілу частину 8 біт і 24 - на дробову. Відповідно, вона здатна зберігати числа від -128 до 128-z з ціною (вагою) молодшого розряду z = 2 - 24 = 5. 96 ⋅ 10 - 8 = 596 \ cdot 10 ^>.
Для кутових величин найчастіше роблять z = 2 π ⋅ 2 - f> (особливо якщо тригонометричні функції обчислюються по таблиці).
Назва «фіксована кома» (або «фіксована точка»; далі - ФЗ) сталося через простий метафори: між двома заздалегідь певними розрядами ставиться кома для перетворення цілого числа в дробове. Наприклад, ціле число +1234 після вставки коми перетворюється в дробове 12,34.
У Великобританії, США та інших країнах замість коми для відділення цілої частини числа від дробу використовується точка, тому поняття «фіксована точка» і «фіксована кома» еквівалентні.
Недолік фіксованою комою - дуже вузький діапазон чисел, з загрозою переповнення на одному кінці діапазону і втратою точності обчислень на іншому. Ця проблема і привела до винаходу плаваючою комою. Наприклад: якщо потрібна точність у 3 значущих цифри, 4-байтовая фіксована кома дає діапазон в 6 порядків (тобто, різниця приблизно 10 6 між найбільшим і найменшим числом), 4-байтовое число одинарної точності - в 70 порядків.
Мало хто мови програмування надають вбудовану підтримку чисел з фіксованою комою, оскільки для більшості застосувань двоичное або десяткове представлення чисел з плаваючою комою простіше і досить точно. Числа з плаваючою комою простіше через їх більшого динамічного діапазону, для них не потрібно попередньо задавати кількість цифр після коми. Якщо ж буде потрібно арифметика з фіксованою комою, вона може бути реалізована програмістом навіть на мовах типу C і C ++, які зазвичай не включають в себе такий арифметики.
Стандарт ISO / IEC TR 18037 додає підтримку чисел з фіксованою комою в мову C. Розробники компілятора GCC вже реалізували цю підтримку.
Практично всі СУБД і мова SQL підтримують арифметику з фіксованою комою і зберігання таких даних. Наприклад, PostgreSQL має спеціальний чисельний тип для точного зберігання чисел до 1000 цифр.
Стандарт OpenGL ES 1.x включає підтримку чисел з фіксованою комою, так як він створений для вбудованих систем. у яких часто немає FPU.
- Додавання і віднімання чисел з фіксованою комою - це звичайні додавання і віднімання: (x ± y) '= x' ± y '.
- Аналогічно з множенням і діленням на целочисленную константу: (c x) '= c ⋅ x'.
- Множення і ділення відрізняються від цілочисельних на константу. (X ⋅ y) '= [x' ⋅ y '⋅ z] = [x' ⋅ y 'u]> \ right]> (xy)' = [x 'z ⋅ y'] = [x '⋅ uy' ]> \ right) '= \ left [> \ right] = \ left [> \ right]>. де [] - операція округлення до цілого. Зокрема, якщо в дробової частини f біт: (x ⋅ y) '= (x' ⋅ y ') shr f. (X y) '= x' shl f y '\, f, \, \, \, \, \ left (> \ right)' = \, f >>>.
- Для інших операцій, крім звичайних рядів Тейлора і ітераційних методів, широко застосовуються обчислення по таблиці.
Якщо операнди і результат мають різну ціну (вага) молодшого розряду, формули складніші - але іноді таке доводиться робити через велику різницю в порядку величин.
Для переведення чисел з формату з фіксованою комою в человекочітаемий формат і навпаки застосовуються звичайні правила перекладу дробових чисел з однієї позиційної системи числення в іншу.