ModNum
and ModNumC
are highly ergonomic modular arithmetic structs intended
for no_std
use.
ModNum
objects represent a value modulo m. The value and modulo can be of any
primitive integer type. Arithmetic operators include +, - (both unary and binary),
*, /, pow()
, and ==. Additional capabilities include computing multiplicative inverses
and solving modular equations.
ModNumC
objects likewise represent a value modulo M, where M is a generic constant of the
usize
type. Arithmetic operators include +, - (both unary and binary), *, and ==.
This library was originally developed to facilitate bidirectional navigation through fixed-size
arrays at arbitrary starting points. This is facilitated by a double-ended iterator that
traverses the entire ring starting at any desired value. The iterator supports both ModNum
and
ModNumC.
Note that ModNum
and ModNumC
are not designed to work with arbitrary-length integers, as
they require their integer type to implement the Copy
trait.
- 0.11.1:
ModNum
andModNumC
now implement theHash
trait.
- 0.11.0:
- Changed signature of the Chinese remainder solver to take ownership of the iterator upon which it operates.
- 0.10.0:
- Now implements
PartialOrd
with reference to generic integers.
- Now implements
- 0.9.0:
- Added the
replace()
method.
- Added the
- 0.8.0:
- Added the
with()
method. - Updated
SaturatingAdd
andSaturatingSub
documentation. - Tested and updated for Rust 2021 edition.
- Added the
- 0.7.1:
- Added some more documentation tests for
ModNumC
.
- Added some more documentation tests for
- 0.7:
- Added
ModNumC
, which uses const generics to enable compile-time checking of compatible modulo. Its functionality is a proper subset ofModNum
. - Added
MNum
trait to allowModNumIterator
to work with bothModNum
andModNumC
. Note: To use the.a()
and.m()
methods, be sure to importMNum
(or justuse bare_metal_modulo::*;
)
- Added
- 0.6:
- Learned that
num::Saturating
is deprecated. - Removed
num::Saturating
implementation. - Replaced by implementing
num::traits::SaturatingAdd
andnum::traits::SaturatingSub
instead.
- Learned that
- 0.5:
- Implemented the
num::Saturating
trait.
- Implemented the
- 0.4:
- Added
ModNum
as a right-hand side option for arithmetic operators. - Implemented
Display
forModNum
objects.
- Added
- 0.3: Added division and modular exponentiation with negative exponents.
- 0.2: Added modular exponentiation and inverse.