Число с фиксированной запятой
Число с фиксированной запятой (
- ,
где z — цена (вес) младшего разряда.
В случае, если , для удобства расчётов его делают дольным единице, чтобы целые числа кодировались без погрешности. Другими словами, выбирают целое число u (машинную единицу) и принимают . В случае, если , его делают целым.
Если не требуется, чтобы какие-либо конкретные дробные числа входили в разрядную сетку, программисты обычно выбирают — это позволяет использовать в операциях умножения и деления битовые сдвиги. Про такую арифметику говорят: «f битов на дробную часть, i=n−f — на целую» и обозначают как «i,f», «i.f» или «Qi.f» (см. числовой формат Q[англ.]). Например: арифметика 8,24 отводит на целую часть 8 бит и 24 — на дробную. Соответственно, она способна хранить числа от −128 до 128−z с ценой (весом) младшего разряда .
Для угловых величин зачастую делают (особенно если тригонометрические функции вычисляются по таблице).
Название
Название «фиксированная запятая» (или «фиксированная точка»; далее — ФЗ) произошло из-за простой метафоры: между двумя заранее определёнными разрядами ставится
В Великобритании, США и других странах вместо запятой для отделения целой части числа от дробной используется точка, поэтому понятия «фиксированная точка» и «фиксированная запятая» эквивалентны.
Применение
Арифметику с фиксированной запятой часто применяют в тех областях, когда использование чисел с плавающей запятой затратно или невозможно ввиду используемой архитектуры процессоров. Например, видеосопроцессоры приставок
Кроме того, арифметику с фиксированной запятой используют для обеспечения минимальной поддержки дробных чисел на целочисленном процессоре:
Числа с фиксированной запятой используют там, где не нужна высокая точность, но требуется производительность. В большинстве современных процессоров ФЗ аппаратно не реализована, но даже программная ФЗ очень быстра — поэтому она применяется в разного рода игровых движках, растеризаторах
Также фиксированную запятую удобно использовать для записи чисел, которые по своей природе имеют постоянную
Недостатки
Недостаток фиксированной запятой — очень узкий диапазон чисел, с угрозой
Реализации
Немногие языки программирования предоставляют встроенную поддержку чисел с фиксированной запятой, поскольку для большинства применений двоичное или десятичное представление чисел с плавающей запятой проще и достаточно точно. Числа с плавающей запятой проще из-за их большего динамического диапазона, для них не нужно предварительно задавать количество цифр после запятой. Если же потребуется арифметика с фиксированной запятой, она может быть реализована программистом на используемом им языке.
Числа с фиксированной запятой в формате
Стандарт
Практически все
Операции
- Сложение и вычитание чисел с фиксированной запятой — это обычные сложение и вычитание: .
- Аналогично с умножением и делением на целочисленную константу: .
- Умножение и деление отличаются от целочисленных на константу.
- ,
- где [ ] — операция округления до целого. В частности, если в дробной части f бит:
- .
- Для других операций, помимо обычных рядов Тейлора и итерационных методов, широко применяются вычисления по таблице.
Если операнды и результат имеют разную цену (вес) младшего разряда, формулы более сложны — но иногда такое приходится делать из-за большой разницы в порядке величин.
Для перевода чисел из формата с фиксированной запятой в человекочитаемый формат и наоборот применяются обычные правила перевода дробных чисел из одной позиционной системы счисления в другую.
Примечания
- ↑ Числа с фиксированной точкой. Применение в компьютерной графике . Дата обращения: 4 ноября 2007. Архивировано 24 ноября 2007 года.
- ↑ VI. FreeType outlines . Дата обращения: 23 марта 2020. Архивировано 11 июля 2020 года.
- ↑ Числа с фиксированной запятой Архивная копия от 29 мая 2015 на Wayback Machine. Документация GCC