Jump to content

Q (числовой формат)

Обозначение Q — это способ указать параметры двоичного формата чисел с фиксированной запятой . Например, в нотации Q числовой формат, обозначаемый Q8.8 означает, что числа с фиксированной точкой в ​​этом формате имеют 8 бит для целой части и 8 бит для дробной части.

ряд других обозначений С той же целью использовался .

Определение

[ редактировать ]

Версия Texas Instruments

[ редактировать ]

Обозначение Q, определенное Texas Instruments , [1] состоит из буквы Q, за которым следует пара чисел m . n , где m — количество битов, используемых для целой части значения, а n — количество дробных битов.

По умолчанию эта запись описывает знаковый двоичный формат с фиксированной запятой, при этом немасштабированное целое число хранится в формате дополнения до двух , используемом в большинстве двоичных процессоров. Первый бит всегда указывает знак значения (1 = отрицательный, 0 = неотрицательный) и не учитывается в параметре m . Таким образом, общее количество w используемых битов равно 1 + m + n .

Например, спецификация Q3.12 описывает знаковое двоичное число с фиксированной запятой, всего w = 16 бит, включая знаковый бит, три бита для целой части и 12 бит, которые являются дробной частью. То есть 16-битное целое число со знаком (дополнение до двух), которое неявно умножается на коэффициент масштабирования 2. −12

В частности, когда n равно нулю, числа являются просто целыми числами. Если m равно нулю, все биты, кроме знакового бита, являются дробными битами; тогда диапазон сохраненного числа составляет от -1,0 (включительно) до +1,0 (исключительно).

М и точку можно опустить, и в этом случае они определяются на основе размера переменной или регистра, в котором хранится значение. Таким образом, Q12 означает целое число со знаком с любым количеством бит, которое неявно умножается на 2. −12 .

Письмо U может иметь префикс Q для обозначения беззнакового двоичного формата с фиксированной запятой. Например, UQ1.15 описывает значения, представленные как беззнаковые 16-битные целые числа с неявным коэффициентом масштабирования 2. −15 , которые находятся в диапазоне от 0,0 до (2 16 −1)/2 15 = +1.999969482421875.

ARM-версия

[ редактировать ]

Вариант обозначения Q использовался ARM . В этом варианте число m включает знаковый бит. Например, 16-битное целое число со знаком будет обозначаться Q15.0 в варианте TI, но Q16.0 в варианте ARM. [2] [3]

Характеристики

[ редактировать ]

Разрешение (разница между последовательными значениями) Q m . n или UQ м . формат n всегда равен 2 п . Диапазон представимых значений зависит от используемых обозначений:

Диапазон представимых значений в обозначении Q
Обозначения Обозначения Texas Instruments Обозначение ARM
Подпись Q м . н −2 м до +2 м − 2 п −2 м −1 до +2 м −1 − 2 п
Беззнаковый UQ м . н от 0 до 2 м − 2 п от 0 до 2 м − 2 п

Например, номер формата Q15.1 требует 15+1 = 16 бит и имеет разрешение 2. −1 = 0,5, а представимые значения варьируются от −2 14 = от −16384,0 до +2 14 − 2 −1 = +16383,5. В шестнадцатеричном формате отрицательные значения варьируются от 0x8000 до 0xFFFF, за которыми следуют неотрицательные значения от 0x0000 до 0x7FFF.

Математические операции

[ редактировать ]

Числа Q представляют собой отношение двух целых чисел: числитель хранится в памяти, знаменатель равно 2 н .

Рассмотрим следующий пример:

  • Знаменатель Q8 равен 2 8 = 256
  • 1,5 равно 384/256
  • 384 сохраняется, 256 выводится, поскольку это число Q8.

Если необходимо сохранить базу числа Q ( n остается постоянным), математические операции с числом Q должны сохранять знаменатель. постоянный. Следующие формулы показывают математические операции с общими числами Q. и . (Если мы рассмотрим пример, упомянутый выше, это 384 и это 256.)

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

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

При использовании C выполняются следующие операции (обратите внимание, что здесь Q относится к количеству битов дробной части):

Добавление

[ редактировать ]
int16_t q_add(int16_t a, int16_t b)
{
    return a + b;
}

С насыщенностью

int16_t q_add_sat(int16_t a, int16_t b)
{
    int16_t result;
    int32_t tmp;

    tmp = (int32_t)a + (int32_t)b;
    if (tmp > 0x7FFF)
        tmp = 0x7FFF;
    if (tmp < -1 * 0x8000)
        tmp = -1 * 0x8000;
    result = (int16_t)tmp;

    return result;
}

В отличие от чисел с плавающей запятой ±Inf, насыщенные результаты не являются липкими и станут ненасыщенными при добавлении отрицательного значения к положительному насыщенному значению (0x7FFF) и наоборот в показанной реализации. В языке ассемблера флаг Signed Overflow можно использовать, чтобы избежать приведения типов, необходимых для этой реализации C.

Вычитание

[ редактировать ]
int16_t q_sub(int16_t a, int16_t b)
{
    return a - b;
}

Умножение

[ редактировать ]
// precomputed value:
#define K   (1 << (Q - 1))
 
// saturate to range of int16_t
int16_t sat16(int32_t x)
{
	if (x > 0x7FFF) return 0x7FFF;
	else if (x < -0x8000) return -0x8000;
	else return (int16_t)x;
}

int16_t q_mul(int16_t a, int16_t b)
{
    int16_t result;
    int32_t temp;

    temp = (int32_t)a * (int32_t)b; // result type is operand's type
    // Rounding; mid values are rounded up
    temp += K;
    // Correct by dividing by base and saturate result
    result = sat16(temp >> Q);

    return result;
}

Разделение

[ редактировать ]
int16_t q_div(int16_t a, int16_t b)
{
    /* pre-multiply by the base (Upscale to Q16 so that the result will be in Q8 format) */
    int32_t temp = (int32_t)a << Q;
    /* Rounding: mid values are rounded up (down for negative values). */
    /* OR compare most significant bits i.e. if (((temp >> 31) & 1) == ((b >> 15) & 1)) */
    if ((temp >= 0 && b >= 0) || (temp < 0 && b < 0)) {   
        temp += b / 2;    /* OR shift 1 bit i.e. temp += (b >> 1); */
    } else {
        temp -= b / 2;    /* OR shift 1 bit i.e. temp -= (b >> 1); */
    }
    return (int16_t)(temp / b);
}

См. также

[ редактировать ]
  1. ^ «Приложение А.2». Справочник программиста библиотеки DSP TMS320C64x (PDF) . Даллас, Техас, США: Texas Instruments Incorporated . Октябрь 2003 г. СПРУ565. Архивировано (PDF) из оригинала 22 декабря 2022 г. Проверено 22 декабря 2022 г. (150 страниц)
  2. ^ «Руководство по отладчикам ARM Developer Suite AXD и Armsd» . 1.2. АРМ Лимитед . 2001 [1999]. Глава 4.7.9. AXD > Возможности AXD > Форматирование данных > Q-формат. ARM DUI 0066D. Архивировано из оригинала 04.11.2017.
  3. ^ «Глава 4.7.9. AXD > Возможности AXD > Форматирование данных > Q-формат». Руководство по отладчикам RealView Development Suite AXD и Armsd (PDF) . 3.0. АРМ Лимитед . 2006 [1999]. стр. 4–24. ARM DUI 0066G. Архивировано (PDF) из оригинала 4 ноября 2017 г.

Дальнейшее чтение

[ редактировать ]
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: d851231f5c9a0fd0941d4dd196b251f1__1713169260
URL1:https://arc.ask3.ru/arc/aa/d8/f1/d851231f5c9a0fd0941d4dd196b251f1.html
Заголовок, (Title) документа по адресу, URL1:
Q (number format) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)