# Fixed-point numbers

The fixed crate provides fixed-point numbers. Currently it uses the typenum crate for the fractional bit count; it is planned to move to const generics when they are implemented by the Rust compiler.

The crate provides the following types:

All fixed-point numbers can have `Frac` fractional bits, where `Frac` can have any value from 0 up to and including the size of the number in bits. When `Frac` is 0, the fixed-point number behaves like an integer. When `Frac` is equal to the number of bits, the value of the fixed-point number lies in the range −0.5 ≤ x < 0.5 for signed fixed-point numbers, and in the range 0 ≤ x < 1 for unsigned fixed-point numbers.

## Quick example

```use fixed::frac;
use fixed::FixedI32;

// 20 integer bits, 12 fractional bits
type I20F12 = FixedI32<frac::U12>;
// 19/3 = 6 1/3
let six_and_third = I20F12::from_int(19).unwrap() / 3;
// four decimal digits for 12 binary digits
assert_eq!(six_and_third.to_string(), "6.3333");
// convert to i32, taking the ceil
assert_eq!(six_and_third.to_int_ceil(), 7);```

## Using the fixed crate

The fixed crate is available on crates.io. To use it in your crate, add it as a dependency inside Cargo.toml:

``````[dependencies]
fixed = "0.1.1"
``````

You also need to declare it by adding this to your crate root (usually lib.rs or main.rs):

`extern crate fixed;`

This crate is free software: you can redistribute it and/or modify it under the terms of either

 FixedI8 An eight-bit fixed-point signed integer with `Frac` fractional bits. FixedI16 A 16-bit fixed-point signed integer with `Frac` fractional bits. FixedI32 A 32-bit fixed-point signed integer with `Frac` fractional bits. FixedI64 A 64-bit fixed-point signed integer with `Frac` fractional bits. FixedI128 A 128-bit fixed-point signed integer with `Frac` fractional bits. FixedU8 An eight-bit fixed-point unsigned integer with `Frac` fractional bits. FixedU16 A 16-bit fixed-point unsigned integer with `Frac` fractional bits. FixedU32 A 32-bit fixed-point unsigned integer with `Frac` fractional bits. FixedU64 A 64-bit fixed-point unsigned integer with `Frac` fractional bits. FixedU128 A 128-bit fixed-point unsigned integer with `Frac` fractional bits.