# 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