Contributors: @cuviper, @ralphtandetzky, @yhx-12243
const ZERO and implement num_traits::ConstZeromodinv methods for the modular inverseContributors: @cuviper, @joelonsql, @waywardmonkeys
From<bool> for BigInt and BigUint.num_traits::Euclid and CheckedEuclid for BigInt and BigUint.BigInt and BigUint::to_f32 and to_f64.num_traits::FromBytes and ToBytes for BigInt and BigUint.Contributors: @AaronKutch, @archseer, @cuviper, @dramforever, @icecream17, @icedrocket, @janmarthedal, @jaybosamiya, @OliveIsAWord, @PatrickNorton, @smoelius, @waywardmonkeys
Contributors: @arvidn, @cuviper, @guidovranken
Contributors: @catenacyber, @cuviper
DoubleEndedIterator for U32Digits and U64Digits.Contributors: @cuviper, @PatrickNorton
arbitrary support has been updated to 1.0, requiring Rust 1.40.quickcheck support has been updated to 1.0, requiring Rust 1.46.rand support has been updated to 0.8, requiring Rust 1.36.Debug now shows plain numeric values for BigInt and BigUint, rather than the raw list of internal digits.Contributors: @cuviper, @Gelbpunkt
Contributors: @catenacyber, @cuviper
BigUint methods count_ones and trailing_ones return the number of 1 bits in the entire value or just its least-significant tail, respectively.BigInt and BigUint methods bit and set_bit will read and write individual bits of the value. For negative BigInt, bits are determined as if they were in the two's complement representation.from_radix_le and from_radix_be methods now accept empty buffers to represent zero.BigInt and BigUint can now iterate digits as u32 or u64, regardless of the actual internal digit size.Contributors: @BartMassey, @cuviper, @janmarthedal, @sebastianv89, @Speedy37
x86 and x86_64 when built with Rust 1.33 or later.to_f32 and to_f64 now return infinity for very large numbers, rather than None. This does preserve the sign too, so a large negative BigInt will convert to negative infinity.arbitrary feature implements arbitrary::Arbitrary, distinct from quickcheck::Arbitrary.BigInt and BigUint will opportunistically shrink capacity if the internal vector is much larger than needed.Contributors: @cuviper, @e00E, @ejmahler, @notoria, @tczajka
BigDigit may now be either u32 or u64, although that implementation detail is not exposed in the API. For now, this is chosen to match the target pointer size, but may change in the future.std is now supported with the alloc crate on Rust 1.36.Pow is now implemented for bigint values, not just references.TryFrom is now implemented on Rust 1.34 and later, converting signed integers to unsigned, and narrowing big integers to primitives.Shl and Shr are now implemented for a variety of shift types.trailing_zeros() returns the number of consecutive zeros from the least significant bit.BigInt::magnitude and into_parts methods give access to its BigUint part as the magnitude.num-bigint now requires Rust 1.31 or greater.rand support has been updated to 0.7, requiring Rust 1.32.quickcheck support has been updated to 0.9, requiring Rust 1.34.impl Neg for BigUint, which only ever panicked.u64 instead of usize.Contributors: @cuviper, @dignifiedquire, @hansihe, @kpcyrd, @milesand, @tech6hutch
Contributors: @cuviper, @HactarCE
Contributors: @cuviper, @tspiteri
BigUint::to_u32_digits method returns the number as a little-endian vector of base-232 digits. The same method on BigInt also returns the sign.BigUint::modpow now applies a modulus even for exponent 1, which also affects BigInt::modpow.BigInt::modpow now returns the correct sign for negative bases with even exponents.Contributors: @alex-ozdemir, @cuviper, @dingelish, @Speedy37, @youknowone
Pow is now implemented for BigUint exponents.quickcheck feature enables implementations of Arbitrary.Contributors: @cuviper, @lcnr, @maxbla, @mikelodder7, @mikong, @TheLetterTheta, @tspiteri, @XAMPPRocky, @youknowone
Roots implementations now use better initial guesses.to_signed_bytes_* for some positive numbers, where the most-significant byte is 0x80 and the rest are 0.Contributors: @cuviper, @leodasvacas
RandBigInt now uses Rng::fill_bytes to improve performance, instead of repeated gen::<u32> calls. The also affects the implementations of the other rand traits. This may potentially change the values produced by some seeded RNGs on previous versions, but the values were tested to be stable with ChaChaRng, IsaacRng, and XorShiftRng.BigInt and BigUint now implement num_integer::Roots.BigInt and BigUint now implement num_traits::Pow.BigInt and BigUint now implement operators with 128-bit integers.Contributors: @cuviper, @dignifiedquire, @mancabizjak, @Robbepop, @TheIronBorn, @thomwiggers
BigInt and BigUint now implement Product and Sum for iterators of any item that we can Mul and Add, respectively. For example, a factorial can now be simply: let f: BigUint = (1u32..1000).product();BigInt now supports two's-complement logic operations, namely BitAnd, BitOr, BitXor, and Not. These act conceptually as if each number had an infinite prefix of 0 or 1 bits for positive or negative.BigInt now supports assignment operators like AddAssign.BigInt and BigUint now support conversions with i128 and u128, if sufficient compiler support is detected.BigInt and BigUint now implement rand's SampleUniform trait, and a custom RandomBits distribution samples by bit size.num-bigint now requires rustc 1.15 or greater.std feature, and won't build without it. This is in preparation for someday supporting #![no_std] with alloc.serde dependency has been updated to 1.0, still disabled by default. The rustc-serialize crate is no longer supported by num-bigint.rand dependency has been updated to 0.5, now disabled by default. This requires rustc 1.22 or greater for rand's own requirement.Shr for BigInt now rounds down rather than toward zero, matching the behavior of the primitive integers for negative values.ParseBigIntError is now an opaque type.big_digit module is no longer public, nor are the BigDigit and DoubleBigDigit types and ZERO_BIG_DIGIT constant that were re-exported in the crate root. Public APIs which deal in digits, like BigUint::from_slice, will now always be base-u32.Contributors: @clarcharr, @cuviper, @dodomorandi, @tiehuis, @tspiteri
ramp, rug, rust-gmp, and apint.Contributors: @cuviper, @Robbepop
BigInt::modpow performs signed modular exponentiation, using the existing BigUint::modpow and rounding negatives similar to mod_floor.Contributors: @cuviper
lcm now avoids creating a large intermediate product.gcd now uses Stein's algorithm with faster shifts instead of division.rand support is now extended to 0.4 (while still allowing 0.3).Contributors: @cuviper, @Emerentius, @ignatenkobrain, @mhogrefe
No prior release notes were kept. Thanks all the same to the many contributors that have made this crate what it is!