Crate tinymath

Source
Expand description

Routines for performing arithmetic on small data types.

This focus of this crate is currently on functions to perform operations of the form a * b / 2^c. Normally this operation requires using the integer one size larger than the size of a and b, but this crate performs these operations without resorting to a larger integer type.

The included Criterion benchmarks indicate that, individually, these operations are slightly faster than the equivalent operations utilizing the larger integer type.

The motivation to write this crate was to experiment with vectorization; in theory, 8 ops in i8 could take as long as 4 ops in i16. This has not been definitively measured.

This is not an officially supported Google product.

Functionsยง

i8_mul_div_128
Computes a * b / 128 without exceeding the bounds of an i8.
saturating_i16_mul_div_1024
Computes a * b / 1024 without exceeding the bounds of an i16.