reciprocal

Crates.ioreciprocal
lib.rsreciprocal
version0.1.2
sourcesrc
created_at2021-05-12 01:23:54.006918
updated_at2021-05-28 12:25:57.420466
descriptionBaseline implementation of integer division by constants
homepage
repositoryhttps://github.com/pkhuong/reciprocal
max_upload_size
id396378
size30,140
Paul Khuong (pkhuong)

documentation

README

Baseline implementation of division by constants

When dividing integers by compile-time constants, compilers (LLVM) can be trusted to convert those to a sequence of multiplication and shift.

That doesn't work so well when the constant isn't known until runtime.

This crate implements a simple strategy with reliable performance. Does reliable imply good? For this application, it does.

The basic PartialReciprocal should be compiled to a constant-time fast path, and can handle every divisor except 0, 1, and u64::MAX.

The slightly more complex Reciprocal can also divide by 1 and u64::MAX, at the expense of one more u64 field, and a slightly more complex (one more load, maybe one more integer arithmetic instruction) fast path.

Commit count: 28

cargo fmt