Crate fpa [−] [src]
Fixed point arithmetic
A fixed point number is an alternative representation for a real number.
IEEE floats, f32
and f64
, being the standard format in processors with
Floating Point Units (FPU). You should consider using fixed numbers on
systems where there's no FPU and performance is critical as fixed point
arithmetic is faster than software emulated IEEE float arithmetic. Do note
that fixed point numbers tend to be more prone to overflows as they operate
in ranges much smaller than floats.
The fixed point numbers exposed in this library use the following naming
convention: IxFy
, where x
is the number of bits used for the integer
part and y
is the number of bits used for the fractional part.
Unlike IEEE floats, fixed points numbers have fixed precision. One can
exchange range for precision by selecting different values for x
and y
:
- Range:
[-2 ^ (y - 1), 2 ^ (y - 1) - 2 ^ (-x)]
- Precision:
2 ^ (-x)
For example, the type I1F7
has range [-1, 0.9921875]
and precision
0.0078125
.
Examples
- Casts
// https://crates.io/crates/cast extern crate cast; extern crate fpa; use cast::f64; // 32-bit fixed point number, 16 bits for the integer part and 16 bits for // the fractional part use fpa::I16F16; fn main() { // casts an integer into a fixed point number (infallible) let q = I16F16(1i8); // casts the fixed point number into a float (infallible) let f = f64(q); assert_eq!(f, 1.); }
- Arithmetic
use fpa::I16F16; // NOTE the `f64` -> `I16F16` cast is fallible because of NaN and infinity assert_eq!(I16F16(1.25_f64).unwrap() + I16F16(2.75_f64).unwrap(), I16F16(4_f64).unwrap()); assert_eq!(I16F16(2_f64).unwrap() / I16F16(0.5_f64).unwrap(), I16F16(4_f64).unwrap()); assert_eq!(I16F16(2_f64).unwrap() * I16F16(0.5_f64).unwrap(), I16F16(1_f64).unwrap());
- Trigonometry
extern crate cast; extern crate fpa; use cast::f64; use fpa::I2F30; fn main() { let (r, _) = I2F30(0.3_f64).unwrap().polar(I2F30(0.4_f64).unwrap()); assert!((f64(r) - 0.5).abs() < 1e-5); }
Structs
Q |
Fixed point number |
Functions
I10F6 |
Checked cast |
I10F22 |
Checked cast |
I11F5 |
Checked cast |
I11F21 |
Checked cast |
I12F4 |
Checked cast |
I12F20 |
Checked cast |
I13F3 |
Checked cast |
I13F19 |
Checked cast |
I14F2 |
Checked cast |
I14F18 |
Checked cast |
I15F1 |
Checked cast |
I15F17 |
Checked cast |
I16F16 |
Checked cast |
I17F15 |
Checked cast |
I18F14 |
Checked cast |
I19F13 |
Checked cast |
I1F7 |
Checked cast |
I1F15 |
Checked cast |
I1F31 |
Checked cast |
I20F12 |
Checked cast |
I21F11 |
Checked cast |
I22F10 |
Checked cast |
I23F9 |
Checked cast |
I24F8 |
Checked cast |
I25F7 |
Checked cast |
I26F6 |
Checked cast |
I27F5 |
Checked cast |
I28F4 |
Checked cast |
I29F3 |
Checked cast |
I2F6 |
Checked cast |
I2F14 |
Checked cast |
I2F30 |
Checked cast |
I30F2 |
Checked cast |
I31F1 |
Checked cast |
I3F5 |
Checked cast |
I3F13 |
Checked cast |
I3F29 |
Checked cast |
I4F4 |
Checked cast |
I4F12 |
Checked cast |
I4F28 |
Checked cast |
I5F3 |
Checked cast |
I5F11 |
Checked cast |
I5F27 |
Checked cast |
I6F2 |
Checked cast |
I6F10 |
Checked cast |
I6F26 |
Checked cast |
I7F1 |
Checked cast |
I7F9 |
Checked cast |
I7F25 |
Checked cast |
I8F8 |
Checked cast |
I8F24 |
Checked cast |
I9F7 |
Checked cast |
I9F23 |
Checked cast |
Type Definitions
I10F6 |
Fixed point number |
I10F22 |
Fixed point number |
I11F5 |
Fixed point number |
I11F21 |
Fixed point number |
I12F4 |
Fixed point number |
I12F20 |
Fixed point number |
I13F3 |
Fixed point number |
I13F19 |
Fixed point number |
I14F2 |
Fixed point number |
I14F18 |
Fixed point number |
I15F1 |
Fixed point number |
I15F17 |
Fixed point number |
I16F16 |
Fixed point number |
I17F15 |
Fixed point number |
I18F14 |
Fixed point number |
I19F13 |
Fixed point number |
I1F7 |
Fixed point number |
I1F15 |
Fixed point number |
I1F31 |
Fixed point number |
I20F12 |
Fixed point number |
I21F11 |
Fixed point number |
I22F10 |
Fixed point number |
I23F9 |
Fixed point number |
I24F8 |
Fixed point number |
I25F7 |
Fixed point number |
I26F6 |
Fixed point number |
I27F5 |
Fixed point number |
I28F4 |
Fixed point number |
I29F3 |
Fixed point number |
I2F6 |
Fixed point number |
I2F14 |
Fixed point number |
I2F30 |
Fixed point number |
I30F2 |
Fixed point number |
I31F1 |
Fixed point number |
I3F5 |
Fixed point number |
I3F13 |
Fixed point number |
I3F29 |
Fixed point number |
I4F4 |
Fixed point number |
I4F12 |
Fixed point number |
I4F28 |
Fixed point number |
I5F3 |
Fixed point number |
I5F11 |
Fixed point number |
I5F27 |
Fixed point number |
I6F2 |
Fixed point number |
I6F10 |
Fixed point number |
I6F26 |
Fixed point number |
I7F1 |
Fixed point number |
I7F9 |
Fixed point number |
I7F25 |
Fixed point number |
I8F8 |
Fixed point number |
I8F24 |
Fixed point number |
I9F7 |
Fixed point number |
I9F23 |
Fixed point number |