Expand description
Two types, Uint and Int, like smallvec for big integers.
Anything that fits in 32 bits stays on the stack. Numbers that
don’t fit are stored in a Box<num_bigint::BigUint> / Box<num_bigint::BigInt>.
On 64-bit architectures, by default we use unsafe to compress
the types to 8 bytes, exploiting pointer alignment. This behavior
is triggered by the unsafe-opt feature, which is enabled by default.
§Implemented traits
Most important numeric traits have been implemented. Here are some that aren’t yet; pull requests are welcome!
- Bit operations
num_traits::Num,num_traits::Signed,num_traits::Unsigned,num_integer::Integer,num_integer::Roots,std::iter::Product,std::iter::Sum,num_traits::pow::Pow- Other methods implemented directly on
BigInt,BigUint - Implement
num_bigint::{ToBigInt, ToBigUint}
There aren’t super many unit tests currently, but the code is sufficiently simple that there is not much space where bugs could hide.