Число с фиксированной запятой

Число с фиксированной запятой

Число с фиксированной запятой — формат представления вещественного числа в памяти ЭВМ в виде целого числа. При этом само число x и его целочисленное представление x′ связаны формулой

x = x' \cdot z,

где z — цена (вес) младшего разряда.

Простейший пример арифметики с фиксированной запятой — перевод рублей в копейки. В таком случае, чтобы запомнить сумму 12 рублей 34 копейки, мы записываем в ячейку памяти число 1234.

В случае, если z<1, для удобства расчётов делают, чтобы целые числа кодировались без погрешности. Другими словами, выбирают целое число u (машинную единицу) и принимают z = \frac 1 u. В случае, если z>1, его делают целым.

Если не требуется, чтобы какие-либо конкретные дробные числа входили в разрядную сетку, программисты обычно выбирают z=2^{-f} это позволяет использовать в операциях умножения и деления битовые сдвиги. Про такую арифметику говорят: «f битов на дробную часть, i=n−f — на целую» и обозначают как «i,f» или «i.f». Например: арифметика 8,24 отводит на целую часть 8 битов и 24 — на дробную. Соответственно, она способна хранить числа от −128 до 128−z с ценой (весом) младшего разряда z = 2^{-24} = 5{,}96 \cdot 10^{-8}.

Для угловых величин зачастую делают z=2 \pi \cdot 2^{-f} (особенно если тригонометрические функции вычисляются по таблице).

Содержание

Название

Название «фиксированная запятая» произошло из-за простой метафоры: между двумя заранее определёнными разрядами ставится запятая, превращая, например, целое число 1234 в дробное 12,34.

Иногда говорят «фиксированная точка» (англ. fixed-point representation): в английской традиции целая часть от дробной отделяется точкой.

Применение

  • Чтобы обеспечить минимальную поддержку дробных чисел на целочисленном процессоре — микроконтроллера, мобильного телефона, приставок вплоть до Playstation и т. д. Если не решаются некорректные задачи и СЛАУ высокого порядка, фиксированной запятой зачастую достаточно — важно только подобрать подходящую цену (вес) младшего разряда для каждой из величин.
  • Для ускорения вычислений в местах, где не требуется высокая точность. В большинстве современных процессоров ФЗ аппаратно не реализована, но даже программная ФЗ очень быстра — поэтому она применяется в разного рода игровых движках, растеризаторах[1] и т. д. Например, движок Doom для измерения расстояний использует фиксированную запятую 16,16, для измерения углов — 360°=65536.
  • Для записи чисел, которые по своей природе имеют постоянную абсолютную погрешность: координаты в программах вёрстки, денежные суммы. Например, и сдачу в супермаркете, и налоги в стране вычисляют с точностью до копейки. А файлы метрики шрифтов TeX используют 32-битный знаковый тип с фиксированной запятой (12,20). На подобные величины можно отдать и плавающую запятую с достаточным количеством знаков мантиссы — но тогда поле порядка становится излишним.
  • Кроме того, фиксированная запятая ведёт себя абсолютно предсказуемо — при подсчёте денег это позволяет наладить разные виды округления, а в играх — наиболее простой способ реализовать мультиплеер и запись повторов.

Недостаток фиксированной запятой — очень узкий диапазон чисел, с угрозой переполнения на одном конце диапазона и потерей точности вычислений на другом. Эта проблема и привела к изобретению плавающей запятой. Например: если нужна точность в 3 значащих цифры, 4-байтовая фиксированная запятая даёт диапазон в 6 порядков (то есть, разница приблизительно 106 между самым большим и самым маленьким числом), 4-байтовое число одинарной точности — в 70 порядков.

Реализации

Немногие языки программирования предоставляют встроенную поддержку чисел с фиксированной запятой, поскольку для большинства применений двоичное или десятичное представление чисел с плавающей запятой проще и достаточно точно. Числа с плавающей запятой проще из-за их большего динамического диапазона, для них не нужно предварительно задавать количество цифр после запятой. Если же потребуется арифметика с фиксированной запятой, она может быть реализована программистом даже на языках типа C и C++, которые обычно не включают в себя такой арифметики.

Числа с фиксированной запятой в формате BCD часто используются для хранения денежных величин — неточности от форматов с плавающей запятой недопустимы, а простеньким микроконтроллерам платёжных терминалов BCD предпочтительнее двоичного представления. Исторически, числа с фиксированной точкой часто использовались для десятичных типов данных, например в языках PL/I и COBOL. Язык программирования Ada включал встроенную поддержку чисел с фиксированной запятой (как двоичных, так и десятичных) и чисел с плавающей запятой. JOVIAL и Coral 66 также предоставляли оба формата.

Стандант ISO/IEC TR 18037 описывает поддержку чисел с фиксированной запятой для языка Си. Данная поддержка реализована в компиляторе GCC[2], производители других компиляторов реализуют поддержку этих расширений позже.

Практически все СУБД и язык SQL поддерживают арифметику с фиксированной запятой и хранение таких данных. Например, PostgreSQL имеет специальный численный тип для точного хранения чисел до 1000 цифр.

Видео-сопроцессоры приставок PlayStation (Sony), Saturn (Sega), Game Boy Advance (Nintendo), Nintendo DS, GP2X используют арифметику с фиксированной запятой для того, чтобы увеличить пропускную способность на архитектурах без FPU.

Стандарт OpenGL ES 1.x включает поддержку чисел с фиксированной запятой, так как он создан для встраиваемых (embedded) систем, у которых часто нет FPU.

Операции

  • Сложение и вычитание чисел с фиксированной запятой — это обычные сложение и вычитание: (x \pm y)' = x' \pm y' \,.
  • Умножение и деление отличаются от целочисленных на константу.
    (x \cdot y)' = \left[ x' \cdot y' \cdot z \right] = \left[ \frac {x' \cdot y'} u \right]
    \left(\frac x y \right)' = \left[ \frac {x'} {z \cdot y'} \right] = \left[ \frac {x' \cdot u} {y'} \right] ,
    где [] — операция округления до целого. В частности, если в дробной части f бит:
    
   (x \cdot y)' = (x' \cdot y') \, \operatorname{shr} \, f, \,\,\,\,
   \left(\frac x y \right)' = \frac {x' \, \operatorname{shl} \, f} {y'}
  .
  • Для других операций, помимо обычных рядов Тейлора и итерационных методов, широко применяются вычисления по таблице.

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

Для перевода чисел из формата с фиксированной запятой в человекочитаемый формат и наоборот применяются обычные правила перевода дробных чисел из одной позиционной системы счисления в другую.

Примечания


Wikimedia Foundation. 2010.

Игры ⚽ Нужна курсовая?

Полезное


Смотреть что такое "Число с фиксированной запятой" в других словарях:

  • Число с плавающей запятой — Число с плавающей запятой  форма представления действительных чисел, в которой число хранится в форме мантиссы и показателя степени. При этом число с плавающей запятой имеет фиксированную относительную точность и изменяющуюся абсолютную.… …   Википедия

  • число с фиксированной точкой (запятой) — — [Е.С.Алексеев, А.А.Мячев. Англо русский толковый словарь по системотехнике ЭВМ. Москва 1993] Тематики информационные технологии в целом EN fixed point number …   Справочник технического переводчика

  • Числа с фиксированной точкой — Число с фиксированной запятой формат представления вещественного числа в памяти ЭВМ в виде целого числа. При этом само число x и его целочисленное представление x′ связаны формулой , где z цена младшего разряда. Простейший пример арифметики с… …   Википедия

  • Числа с плавающей запятой — Плавающая запятая  форма представления действительных чисел, в которой число хранится в форме мантиссы и показателя степени. При этом число с плавающей запятой имеет фиксированную относительную точность и изменяющуюся абсолютную. Наиболее… …   Википедия

  • Фиксированная запятая — Число с фиксированной запятой  формат представления вещественного числа в памяти ЭВМ в виде целого числа. При этом само число x и его целочисленное представление x′ связаны формулой , где z  цена (вес) младшего разряда. Простейший… …   Википедия

  • Фиксированная точка — Число с фиксированной запятой формат представления вещественного числа в памяти ЭВМ в виде целого числа. При этом само число x и его целочисленное представление x′ связаны формулой , где z цена младшего разряда. Простейший пример арифметики с… …   Википедия

  • Сокращения — 3.1. Сокращения ДМ документ на магнитном носителе. МНЗ магнитный носитель с записью. ПИ программное изделие. ПС программное средство. ПЭВМ персональная ЭВМ. ТАИ тепловая автоматика и измерения. ТЗ техническое задание. ТУ технические условия. ФАП… …   Словарь-справочник терминов нормативно-технической документации

  • Сокращения и обозначения — 3.10 Сокращения и обозначения ∆IL дифференциальная защита линии; ∆IT дифференциальная защита трансформатора; АСС текущий канал (Actual channel); ASC ASCII символ; ASDU блок данных прикладного уровня (Application Service Data Unit); APCI… …   Словарь-справочник терминов нормативно-технической документации

  • ГОСТ Р МЭК 60870-5-103-2005: Устройства и системы телемеханики. Часть 5. Протоколы передачи. Раздел 103. Обобщающий стандарт по информационному интерфейсу для аппаратуры релейной защиты — Терминология ГОСТ Р МЭК 60870 5 103 2005: Устройства и системы телемеханики. Часть 5. Протоколы передачи. Раздел 103. Обобщающий стандарт по информационному интерфейсу для аппаратуры релейной защиты оригинал документа: 3.2 архитектура повышенной… …   Словарь-справочник терминов нормативно-технической документации

  • Валютный тип — Тип данных Содержание 1 История 2 Определение 3 Необходимость использования типов данных …   Википедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»