Q(숫자 형식)
Q (number format)Q 표기법은 이항 고정 소수점 번호 형식의 매개변수를 지정하는 간결한 방법입니다.다른 많은 표기가 같은 목적으로 사용되었습니다.
정의.
Texas Instruments 버전
Texas [citation needed]Instruments에서 정의한 Q 표기법은 다음과 같은 문자로 구성됩니다.Q에 이어 한 쌍의 숫자 m.n. 여기서 m은 값의 정수 부분에 사용되는 비트 수, n은 분수 비트 수입니다.
기본적으로 이 표기법은 부호화된 이진 고정점 형식을 나타내며, 스케일링되지 않은 정수는 대부분의 이진 프로세서에서 사용되는 2개의 보완 형식으로 저장됩니다.첫 번째 비트는 항상 값 기호(1 = 음, 0 = 비음)를 제공하며 m 파라미터에는 카운트되지 않습니다.따라서 사용되는 비트의 총 w 수는 1 + m + n 입니다.
예를 들어, 사양 Q3.12는 부호 비트, 정수 부분의 3비트 및 분수로 가정되는 12비트로 구성된 w = 16비트의 부호화된 이진 고정 소수점 숫자를 기술합니다.즉, 16비트 부호(2's complement) 정수로 스케일링−12 팩터2를 암묵적으로 곱한 것입니다.
특히 n이 0이면 숫자는 정수일 뿐입니다.m이 0인 경우 부호 비트를 제외한 모든 비트는 분수 비트입니다.저장된 숫자의 범위는 -1.0(포함) ~ +1(포함)입니다.m과 n은 모두 음수일 수 있습니다.
m과 점은 생략할 수 있습니다.이 경우 값이 저장되는 변수 또는 레지스터의 크기에서 유추됩니다.따라서 Q12는 임의의 수의 비트를 가진 부호 있는 정수를 의미하며, 이는 암묵적으로 2를−12 곱한 것입니다.
부호 없는 이진 고정 소수점 형식을 나타내기 위해 문자 U를 Q 앞에 붙일 수 있습니다.예를 들어, UQ1.15에서는 0.0 ~ (2-116)/215 = +1.999969482421875 범위의 암묵적 스케일링 팩터가 2인−15 부호 없는 16비트 정수로 표현되는 값을 설명합니다.
AMD 버전
Q 표기법의 변형은 AMD에서 사용되고 있습니다.이 변형에서는 m 번호에 부호 비트가 포함됩니다.예를 들어, 16비트 부호 있는 정수는Q15.0
TI 바리안트에서는Q16.0
AMD [1][2]변종에서는요.
특성.
Qm.n 또는 UQm.n 형식의 분해능(연속값의 차이)은 항상−n 2입니다.표시 가능한 값의 범위는 사용되는 표기법에 따라 달라집니다.
표기법 | 텍사스 인스트루먼트 표기법 | AMD 표기법 |
---|---|---|
서명필 QM.n | -2m ~ +2m−n - 2 | -2m−1 ~ +2m−1−n - 2 |
서명되지 않은 UQm.n | 0m−n ~ 2 - 2 | 0m−n ~ 2 - 2 |
예를 들어 Q15.1 형식 번호에는 15+1 = 16비트가 필요하며 분해능−1 2 = 0.5이며 표시 가능한 값의 범위는 -214 = -16384.0 ~ +214−1 - 2 = +16383.5입니다.16진수에서는 음의 값의 범위는 0x8000 ~0xFFF이며 음이 아닌 값의 범위는 0x0000 ~0x7FFF입니다
연산
Q 숫자는 2개의 정수의 비율입니다.분자는 스토리지에 보관되고 dd는 2와 같습니다n.
다음 예를 생각해 보겠습니다.
- Q8 분모는 2 = 256입니다8.
- 1.5는 384/256과 같다
- 384가 저장되고 256은 Q8 번호이기 때문에 유추됩니다.
Q 숫자의 베이스가 일정하게 유지되는 경우(n은 일정하게 유지됨) Q 숫자 연산에서는 d d를 일정하게 유지해야 합니다.다음 공식은 일반 Q 에 대한 산술 연산을 보여 줍니다(위의 예와 은 이고 d d는 256).
분모는 2의 거듭제곱이기 때문에 곱셈은 왼쪽, 나눗셈은 오른쪽의 산술 시프트로 구현할 수 있습니다.많은 프로세서 시프트는 곱셈이나 나눗셈보다 빠릅니다.
정확도를 유지하려면 중간 곱셈 및 나눗셈 결과가 2배 정밀해야 하며 원하는 Q 수치로 다시 변환하기 전에 중간 결과를 반올림할 때 주의해야 합니다.
C를 사용하면 연산은 다음과 같습니다(여기서 Q는 분수 부품의 비트 수를 나타냅니다).
추가
int16_t 추가(int16_t a, int16_t b) { 돌아가다 a + b; }
포화 상태
int16_t q_add_sat(int16_t a, int16_t b) { int16_t 결과; int32_t tmp; tmp = (int32_t)a + (int32_t)b; 한다면 (tmp > 0x7FFF) tmp = 0x7FFF; 한다면 (tmp < > -1 * 0x8000) tmp = -1 * 0x8000; 결과 = (int16_t)tmp; 돌아가다 결과; }
부동소수점 ±Inf와 달리 포화결과는 스틱하지 않으며 표시된 구현에서 음의 포화값(0x7FF)에 음의 값을 더하면 포화되지 않습니다.어셈블리 언어에서는 서명된 오버플로 플래그를 사용하여 C 구현에 필요한 타입캐스트를 회피할 수 있습니다.
뺄셈
int16_t q_sub(int16_t a, int16_t b) { 돌아가다 a - b; }
곱셈
// 사전 계산된 값: #정의 K (1 < (Q - 1)) // int16_t 범위까지 포화 int16_t sat16(int32_t x) { 한다면 (x > 0x7FFF) 돌아가다 0x7FFF; 또 다른 한다면 (x < > - 0x8000) 돌아가다 - 0x8000; 또 다른 돌아가다 (int16_t)x; } int16_t q_mul(int16_t a, int16_t b) { int16_t 결과; int32_t 임시직; 임시직 = (int32_t)a * (int32_t)b; // 결과 유형은 오퍼랜드의 유형입니다. // 반올림, 중간값 반올림 임시직 += K; // base와 satfaturate 결과로 나누어 수정 결과 = sat16(임시직 >> Q); 돌아가다 결과; }
나누기
int16_t q_div(int16_t a, int16_t b) { /* 베이스에 의해 프리 멀티플라이(Q16으로 업그레이드하여 결과가 Q8 형식으로 표시됨)*/ int32_t 임시직 = (int32_t)a << > Q; /* 반올림: 중간 값은 반올림됩니다(음수 값은 내림).*/ /* 또는 대부분의 유효 비트를 비교합니다.예를 들어 ((((b > 31) & 1) == ((b > 15) & 1) */ 한다면 ((임시직 >= 0 & & b >= 0) (임시직 < > 0 & & b < > 0)) { 임시직 += b / 2; /* 또는 1비트(예: temp += (b >> 1); */ } 또 다른 { 임시직 -= b / 2; /* 또는 1비트 시프트(temp -= (b >> 1); */ } 돌아가다 (int16_t)(임시직 / b); }
「 」를 참조해 주세요.
레퍼런스
- ^ "ARM Developer Suite AXD and armsd Debuggers Guide". 1.2. ARM Limited. 2001 [1999]. Chapter 4.7.9. AXD > AXD Facilities > Data formatting > Q-format. ARM DUI 0066D. Archived from the original on 2017-11-04.
- ^ "Chapter 4.7.9. AXD > AXD Facilities > Data formatting > Q-format". RealView Development Suite AXD and armsd Debuggers Guide (PDF). 3.0. ARM Limited. 2006 [1999]. pp. 4–24. ARM DUI 0066G. Archived (PDF) from the original on 2017-11-04.
추가 정보
- Oberstar, Erick L. (2007-08-30) [2004]. "Fixed Point Representation & Fractional Math" (PDF). 1.2. Oberstar Consulting. Archived (PDF) from the original on 2017-11-04. Retrieved 2017-11-04. (주의: 문서의 정확성에 대해서는 논란이 있습니다.토론을 참조해 주세요).
외부 링크
- "Q-Number-Format Java Implementation". Archived from the original on 2017-11-04. Retrieved 2017-11-04.
- "Q-format Converter". Archived from the original on 2021-06-25. Retrieved 2021-06-25.