Overview
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.
Updates
- 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
PartialOrdwith reference to generic integers.
- Now implements
- 0.9.0:
- Added the
replace()method.
- Added the
- 0.8.0:
- Added the
with()method. - Updated
SaturatingAddandSaturatingSubdocumentation. - 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
MNumtrait to allowModNumIteratorto work with bothModNumandModNumC. Note: To use the.a()and.m()methods, be sure to importMNum(or justuse bare_metal_modulo::*;)
- Added
- 0.6:
- Learned that
num::Saturatingis deprecated. - Removed
num::Saturatingimplementation. - Replaced by implementing
num::traits::SaturatingAddandnum::traits::SaturatingSubinstead.
- Learned that
- 0.5:
- Implemented the
num::Saturatingtrait.
- Implemented the
- 0.4:
- Added
ModNumas a right-hand side option for arithmetic operators. - Implemented
DisplayforModNumobjects.
- Added
- 0.3: Added division and modular exponentiation with negative exponents.
- 0.2: Added modular exponentiation and inverse.