| Crates.io | q-num |
| lib.rs | q-num |
| version | 0.1.2 |
| created_at | 2023-09-28 16:57:24.20387+00 |
| updated_at | 2024-08-13 01:30:28.111663+00 |
| description | Q notation for fixed-point numbers via a proc_macro. |
| homepage | |
| repository | https://github.com/xpe/q-num |
| max_upload_size | |
| id | 986107 |
| size | 35,516 |
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:
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.
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:
Here is one example:
define_q_num!(MyQ, Q6.2);
let a = MyQ::from(13.75);
let b = MyQ::from(-2.25);
let c = a + b; // 11.5