Open Flash logo

SWF Fixed

crates.io GitHub repository Build status

SWF fixed-point numbers for Rust.

A fixed point number represents a decimal values using evenly-distributed bit patterns (as opposed to floating point numbers where the density increases with the proximity to zero).

A fixed point number can be simply thought as an integer divided by a constant value. It is described by its integer part and fractional part: its mathematical value is integer_part + fractional_part / 2^fractional_bits.

For example, the type Ufixed8p8 is an unsigned fixed point number with an 8 bit integer part and 8 bit fractional part. It can represent the 2^16 values corresponding to u16 / 256, the gap between each value (epsilon) is 1 / 256.

This crate defines the fixed points numbers used by SWF files:

| Name | Integer part | Fractional part | Min value | Max value | Epsilon | |-------------|--------------|-----------------|-----------|---------------|----------| | Sfixed8P8 | i8 | u8 | -128 | 128 - 1/256 | 1 / 256 | | Ufixed8p8 | u8 | u8 | 0 | 256 - 1/256 | 1 / 256 | | Sfixed16p16 | i16 | u16 | -2^15 | 2^15 - 1/2^16 | 1 / 2^16 | | Ufixed16p16 | u16 | u16 | 0 | 2^16 - 1/2^16 | 1 / 2^16 |

Usage

```rust use swf_fixed::Sfixed8P8;

fn main() { let a = Sfixed8P8::fromepsilons(256); let b = Sfixed8P8::fromvalue(1); assert_eq!(a, b); } ```

Contributing

This library is a standard Cargo project. You can test your changes with cargo test.

Prefer non-master branches when sending a PR so your changes can be rebased if needed. All the commits must be made on top of master (fast-forward merge). CI must pass for changes to be accepted.