[![Build Status](https://travis-ci.org/fulmicoton/fastdivide.svg?branch=master)](https://travis-ci.org/fulmicoton/fastdivide)
# FastDivide...
FastDivide is a simple/partial RUST port of [libdivide](https://libdivide.com/) by ridiculous_fish
Libdivide is distributed under the zlib license, so does fast divide.
This port is only partial :
It only include one implementation of division for `u64` integers.
# Yes, but what is it really ?
Division is a very costly operation for your CPU.
You may have noticed that when the divisor is known at compile time, your compiler transforms the operations into a cryptic combination of
a multiplication and bitshift.
The key idea is that, rather than computing
N / D
It is faster to compute (with k sufficiently large)
N * ( 2^k / D ) / (2^k)
If D is known in advance, (2^k / D) can be precomputed by the compiler.
Unfortunately if the divisor is unknown at compile time, the compiler cannot use this trick.
The point of `fastdivide` is to apply the same trick by letting you precompute a `DivideU64` object.
# When is it useful ?
If you do a lot (> 10) of division with the same divisor ; and this division is a bottleneck in your program.
This is for instance useful to compute histograms.