1# Release 0.2.6 (2020-01-27)
2
3- [Fix the promotion of negative `isize` in `BigInt` assign-ops][133].
4
5**Contributors**: @cuviper, @HactarCE
6
7[133]: https://github.com/rust-num/num-bigint/pull/133
8
9# Release 0.2.5 (2020-01-09)
10
11- [Updated the `autocfg` build dependency to 1.0][126].
12
13**Contributors**: @cuviper, @tspiteri
14
15[126]: https://github.com/rust-num/num-bigint/pull/126
16
17# Release 0.2.4 (2020-01-01)
18
19- [The new `BigUint::to_u32_digits` method][104] returns the number as a
20  little-endian vector of base-2<sup>32</sup> digits. The same method on
21  `BigInt` also returns the sign.
22- [`BigUint::modpow` now applies a modulus even for exponent 1][113], which
23  also affects `BigInt::modpow`.
24- [`BigInt::modpow` now returns the correct sign for negative bases with even
25  exponents][114].
26
27[104]: https://github.com/rust-num/num-bigint/pull/104
28[113]: https://github.com/rust-num/num-bigint/pull/113
29[114]: https://github.com/rust-num/num-bigint/pull/114
30
31**Contributors**: @alex-ozdemir, @cuviper, @dingelish, @Speedy37, @youknowone
32
33# Release 0.2.3 (2019-09-03)
34
35- [`Pow` is now implemented for `BigUint` exponents][77].
36- [The optional `quickcheck` feature enables implementations of `Arbitrary`][99].
37- See the [full comparison][compare-0.2.3] for performance enhancements and more!
38
39[77]: https://github.com/rust-num/num-bigint/pull/77
40[99]: https://github.com/rust-num/num-bigint/pull/99
41[compare-0.2.3]: https://github.com/rust-num/num-bigint/compare/num-bigint-0.2.2...num-bigint-0.2.3
42
43**Contributors**: @cuviper, @lcnr, @maxbla, @mikelodder7, @mikong,
44@TheLetterTheta, @tspiteri, @XAMPPRocky, @youknowone
45
46# Release 0.2.2 (2018-12-14)
47
48- [The `Roots` implementations now use better initial guesses][71].
49- [Fixed `to_signed_bytes_*` for some positive numbers][72], where the
50  most-significant byte is `0x80` and the rest are `0`.
51
52[71]: https://github.com/rust-num/num-bigint/pull/71
53[72]: https://github.com/rust-num/num-bigint/pull/72
54
55**Contributors**: @cuviper, @leodasvacas
56
57# Release 0.2.1 (2018-11-02)
58
59- [`RandBigInt` now uses `Rng::fill_bytes`][53] to improve performance, instead
60  of repeated `gen::<u32>` calls.  The also affects the implementations of the
61  other `rand` traits.  This may potentially change the values produced by some
62  seeded RNGs on previous versions, but the values were tested to be stable
63  with `ChaChaRng`, `IsaacRng`, and `XorShiftRng`.
64- [`BigInt` and `BigUint` now implement `num_integer::Roots`][56].
65- [`BigInt` and `BigUint` now implement `num_traits::Pow`][54].
66- [`BigInt` and `BigUint` now implement operators with 128-bit integers][64].
67
68**Contributors**: @cuviper, @dignifiedquire, @mancabizjak, @Robbepop,
69@TheIronBorn, @thomwiggers
70
71[53]: https://github.com/rust-num/num-bigint/pull/53
72[54]: https://github.com/rust-num/num-bigint/pull/54
73[56]: https://github.com/rust-num/num-bigint/pull/56
74[64]: https://github.com/rust-num/num-bigint/pull/64
75
76# Release 0.2.0 (2018-05-25)
77
78### Enhancements
79
80- [`BigInt` and `BigUint` now implement `Product` and `Sum`][22] for iterators
81  of any item that we can `Mul` and `Add`, respectively.  For example, a
82  factorial can now be simply: `let f: BigUint = (1u32..1000).product();`
83- [`BigInt` now supports two's-complement logic operations][26], namely
84  `BitAnd`, `BitOr`, `BitXor`, and `Not`.  These act conceptually as if each
85  number had an infinite prefix of `0` or `1` bits for positive or negative.
86- [`BigInt` now supports assignment operators][41] like `AddAssign`.
87- [`BigInt` and `BigUint` now support conversions with `i128` and `u128`][44],
88  if sufficient compiler support is detected.
89- [`BigInt` and `BigUint` now implement rand's `SampleUniform` trait][48], and
90  [a custom `RandomBits` distribution samples by bit size][49].
91- The release also includes other miscellaneous improvements to performance.
92
93### Breaking Changes
94
95- [`num-bigint` now requires rustc 1.15 or greater][23].
96- [The crate now has a `std` feature, and won't build without it][46].  This is
97  in preparation for someday supporting `#![no_std]` with `alloc`.
98- [The `serde` dependency has been updated to 1.0][24], still disabled by
99  default.  The `rustc-serialize` crate is no longer supported by `num-bigint`.
100- [The `rand` dependency has been updated to 0.5][48], now disabled by default.
101  This requires rustc 1.22 or greater for `rand`'s own requirement.
102- [`Shr for BigInt` now rounds down][8] rather than toward zero, matching the
103  behavior of the primitive integers for negative values.
104- [`ParseBigIntError` is now an opaque type][37].
105- [The `big_digit` module is no longer public][38], nor are the `BigDigit` and
106  `DoubleBigDigit` types and `ZERO_BIG_DIGIT` constant that were re-exported in
107  the crate root.  Public APIs which deal in digits, like `BigUint::from_slice`,
108  will now always be base-`u32`.
109
110**Contributors**: @clarcharr, @cuviper, @dodomorandi, @tiehuis, @tspiteri
111
112[8]: https://github.com/rust-num/num-bigint/pull/8
113[22]: https://github.com/rust-num/num-bigint/pull/22
114[23]: https://github.com/rust-num/num-bigint/pull/23
115[24]: https://github.com/rust-num/num-bigint/pull/24
116[26]: https://github.com/rust-num/num-bigint/pull/26
117[37]: https://github.com/rust-num/num-bigint/pull/37
118[38]: https://github.com/rust-num/num-bigint/pull/38
119[41]: https://github.com/rust-num/num-bigint/pull/41
120[44]: https://github.com/rust-num/num-bigint/pull/44
121[46]: https://github.com/rust-num/num-bigint/pull/46
122[48]: https://github.com/rust-num/num-bigint/pull/48
123[49]: https://github.com/rust-num/num-bigint/pull/49
124
125# Release 0.1.44 (2018-05-14)
126
127- [Division with single-digit divisors is now much faster.][42]
128- The README now compares [`ramp`, `rug`, `rust-gmp`][20], and [`apint`][21].
129
130**Contributors**: @cuviper, @Robbepop
131
132[20]: https://github.com/rust-num/num-bigint/pull/20
133[21]: https://github.com/rust-num/num-bigint/pull/21
134[42]: https://github.com/rust-num/num-bigint/pull/42
135
136# Release 0.1.43 (2018-02-08)
137
138- [The new `BigInt::modpow`][18] performs signed modular exponentiation, using
139  the existing `BigUint::modpow` and rounding negatives similar to `mod_floor`.
140
141**Contributors**: @cuviper
142
143[18]: https://github.com/rust-num/num-bigint/pull/18
144
145
146# Release 0.1.42 (2018-02-07)
147
148- [num-bigint now has its own source repository][num-356] at [rust-num/num-bigint][home].
149- [`lcm` now avoids creating a large intermediate product][num-350].
150- [`gcd` now uses Stein's algorithm][15] with faster shifts instead of division.
151- [`rand` support is now extended to 0.4][11] (while still allowing 0.3).
152
153**Contributors**: @cuviper, @Emerentius, @ignatenkobrain, @mhogrefe
154
155[home]: https://github.com/rust-num/num-bigint
156[num-350]: https://github.com/rust-num/num/pull/350
157[num-356]: https://github.com/rust-num/num/pull/356
158[11]: https://github.com/rust-num/num-bigint/pull/11
159[15]: https://github.com/rust-num/num-bigint/pull/15
160
161
162# Prior releases
163
164No prior release notes were kept.  Thanks all the same to the many
165contributors that have made this crate what it is!
166
167