# 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 |