q-num 0.1.0

Provides a proc_macro to define fixed-point numbers in Rust using Q notation.
Documentation
# 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
```