bare_metal_modulo

Crates.iobare_metal_modulo
lib.rsbare_metal_modulo
version1.2.4
sourcesrc
created_at2021-01-05 16:45:13.361049
updated_at2023-02-14 20:46:07.603614
descriptionModNum is a highly ergonomic modular arithmetic struct intended for no_std use
homepagehttps://github.com/gjf2a/bare_metal_modulo
repositoryhttps://github.com/gjf2a/bare_metal_modulo
max_upload_size
id332278
size73,817
Gabriel Ferrer (gjf2a)

documentation

README

Bare Metal Modulo

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.

Modular numbers represent the remainder of an integer when divided by the modulo. If we also store the quotient in addition to the remainder, we have a count of the number of times a value had to "wrap around" during the calculation.

For example, if we start with 8 (mod 17) and add 42, the result is 16 (mod 17) with a wraparound of 2. WrapCountNum and WrapCountNumC objects store this wraparound value and make it available.

Furthermore, it is sometimes useful to be able to move back and forth in a range that is offset from zero. To that end, OffsetNum and OffsetNumC are provided.

Note that ModNum, ModNumC, WrapCountNum, WrapCountNumC, OffsetNum, and OffsetNumC are not designed to work with arbitrary-length integers, as they require their integer type to implement the Copy trait.

Notes

Commit count: 105

cargo fmt