# q-num This library provides the `define_q_num!` procedural macro (evaluated at compile time) to define a signed/unsigned binary fixed-point number type. It uses ARM-style Q notation: `Qm.n` (signed) or `UQm.n` (unsigned), where: - **m** is the number of integer bits, and - **n** is the number of fractional bits. Internally, the macro chooses the narrowest primitive integer type that can hold m + n bits, up to `u64` (unsigned) and `i64` (signed). More internal details are discussed below. ## Q Number Value A Q number's value is the ratio of the stored number (having n + m bits) and a fixed denominator (equal to 2 ^ n). For example, using the UQ3.2 specification, the bit pattern 0b10111 represents the value 5.75. Keeping in mind the denominator is 2 ^ 2 = 4, there are two ways to see this: - 0b10111 / 4 == 23 / 4 == 5.75 - 0b101 + 0b11 / 4 == 5 + 3/4 == 5.75 ## Example Macro Usage Here is one example: ```rs define_q_num!(MyQ, Q6.2); let a = MyQ::from(13.75); let b = MyQ::from(-2.25); let c = a + b; // 11.5 ```