rug 1.0.1

Arbitrary-precision integers, rational, floating-point and complex numbers based on GMP, MPFR and MPC
Documentation
Version 1.0.1 (2018-03-10)
==========================

* Add `Integer::is_power_of_two` method.
* Add `Integer::signed_bits` method.
* Add `Integer::secure_pow_mod` methods.
* Add `Integer::div_rem_round` methods.
* Add `Complex::eq0` method.
* Improve documentation.

Version 1.0.0 (2018-03-03)
==========================

* `Integer::invert_mut` and `Integer::pow_mod_mut` now return
  `Result<(), ()>` instead of `bool`.
* `float::Round`, `float::Constant` and `float::Special` enums are now
  marked as non-exhaustive.
* Remove all deprecated items.
* Remove unsound blanket implementations constrained on
  `T where SmallInteger: Assign<T>` inside `SmallRational` and on
  `T where SmallFloat: Assign<T>` inside `SmallComplex`.

Version 0.10.0 (2018-02-17)
===========================

* `Integer::invert_ref` and `Integer::pow_mod_ref` now return an
  `Option`, not an object that is assignable to `Result`.
* `Float::random_bits` and `Complex::random_bits` are now assignable
  to the number values, not to `Result` objects.
* `Rational::signum`, `Rational::trunc`, `Rational::ceil`,
  `Rational::floor` and `Rational::round` now return `Rational`.
* `Complex::abs`, `Complex::arg` and `Complex::norm` now return
  `Complex`.
* Remove `Default` implementations from all types of `Float` and
  `Complex`; now the precision always has to be specified.
* Remove `Sum` and `Product` implementations for `Float` and
  `Complex`.
* Remove `Clone` and `Copy` implementations from all incomplete
  computation types.
* Revamp top-level crate documentation.
* Add `Integer::parse` and `Rational::parse`, and deprecate
  `ValidInteger`, `ValidRational`, `valid_str_radix` methods, and
  `assign_str*` methods.
* Add `Float::parse` and `Complex::parse`, and deprecate `ValidFloat`,
  `ValidComplex`, `from_str*` methods, `valid_str_radix` methods, and
  `assign_str*` methods.
* Rename `Integer::gcd_coeffs*` methods to `Integer::gcd_cofactors*`.
* `Integer::gcd_cofactors_ref` now supports computing only one
  cofactor.
* Deprecate `Rational::to_integer` and `Rational::as_numer_denom`.
* Deprecate `Rational::as_mut_numer_denom` and replace with
  `Rational::mutate_numer_denom`.
* Deprecate `Complex::as_real_imag`.

Version 0.9.3 (2018-02-09)
==========================

* Add `Integer::square` and `Rational::square` methods.
* Add `Rational::cmp_abs` method.
* Add `Float::sum` and `Complex::sum` methods.
* Add `from_raw`, `into_raw`, `as_raw` and `as_raw_mut` to
  `RandState`.
* Add `RandGen::boxed_clone` and `RandState::new_custom_boxed`, and
  thus support for cloning custom random generators.
* Fix `Float::PartialOrd<f32>` (and `<f64>`) to return `None` when the
  primitive is NaN.

Version 0.9.2 (2018-01-12)
==========================

* Require rustc version 1.18.0.
* Require gmp-mpfr-sys version 1.1.0.
* Deprecate most `assign_*` methods, and replace with static methods
  that return an assignable object.
* Deprecate `Rational::copy_to_integer` method.
* Add `Rational::assign_canonical` and `Rational::from_canonical`
  methods.
* Add `Float::ln_u` method.
* Add `Float::round_even` methods.
* Add `Float::gamma_inc` methods.
* Add `Float::random_normal` and `Float::random_exp` methods.
* Deprecate `Float::assign_random_gaussian` methods.
* Add `Complex::cmp_abs` method.
* Add `Complex::root_of_unity` method.
* Deprecate `SmallRational::from_canonicalized_*` methods and replace
  with `SmallRational::from_canonical` method.
* Deprecate `SmallRational::assign_canonicalized_*` methods.
* Add `as_nonreallocating_*` methods to `SmallInteger`,
  `SmallRational`, `SmallFloat` and `SmallComplex`.
* Fix `SmallFloat::new` and `SmallComplex::new` to produce numbers
  with a precision of 53.
* Deprecate and hide `float::Round::AwayFromZero`.
* Add `Integer::signum`, `Rational::signum` and `Float::signum`
  methods.
* Add missing conversion to/from and comparisons to primitive types.
* Add `from_raw`, `into_raw`, `as_raw` and `as_raw_mut` to `Integer`,
  `Rational`, `Float` and `Complex`.
* Add `Float::classify` method.
* Add `Float::mul_add`, `Float::mul_sub`, `Float::mul_add_mul` and
  `Float::mul_sub_mul` methods.
* Add `Complex::mul_add` and `Complex::mul_sub` methods.

Version 0.9.1 (2017-11-27)
==========================

* Implement mathematical operations where operands include references
  to primitives.
* Remove undefined behaviour: replace
  `mem::swap(&mut src, &mut uninitialized)` with
  `ptr::copy_nonoverlapping(&src, &mut uninitialized, 1)`.

Version 0.9.0 (2017-11-16)
==========================

* Move `rug::float::AssignRound` to `rug::ops::AssignRound`.
* `OrdFloat` now orders +NaN above +∞, while −NaN is still below −∞.
* Change `Float::subnormalize` methods to require explicit minimum
  normal exponent.
* Add `Float::subnormalize_ieee` methods to deduce exponent range from
  precision, like old `Float::subnormalize`. The new method also
  supports all IEEE 754-2008 precisions corresponding to k storage
  bits where k ≥ 128 and k is a multiple of 32.
* Deprecate `Rational::fract` methods and replace with
  `Rational::rem_trunc` methods.
* Add `Rational::rem_ceil` and `Rational::rem_floor` methods.
* Add `Rational::rem_round` and `Rational::fract_round` methods.
* Add `Float::next_toward`, `Float::next_up` and `Float::next_down`.
* Add optional serde support.

Version 0.8.0 (2017-10-26)
==========================

* Rename `Integer::sign`, `Rational::sign` and `Float::sign` methods
  as `Integer::cmp0`, `Rational::cmp0` and `Float::cmp0`.
* Rename `Float::pos_diff` as `Float::positive_diff`.
* Move `rug::AssignRound` to `rug::float::AssignRound`.
* Add `Integer::clamp`, `Rational::clamp` and `Float::clamp` methods.
* Add `Integer::div_rem_ceil`, `Integer::div_rem_floor` and
  `Integer::div_rem_euc` methods.
* Add `DivRounding`, `DivRoundingAssign` and `DivRoundingFrom` traits,
  and their `Rem` counterparts, and implement them for `Integer`, and
  for combinations of `Integer` with `i32` or `u32`.
* Add `Rational::fract_floor` and `Rational::fract_ceil` methods.

Version 0.7.0 (2017-09-30)
==========================

* Fix swapped `Float::sin_cos_mut` and `Float::sin_cos_round`,
  `Float::sinh_cosh_mut` and `Float::sinh_cosh_round`, and
  `Float::trunc_fract_mut` and `Float::trunc_fract_round`.
* Fix `Float::to_f32_round`.
* Now `Float::subnormalize` only works for precisions defined in IEEE
  754.
* Add `Integer::gcd_coeffs` methods.

Version 0.6.0 (2017-08-09)
==========================

* Requires rustc version 1.17.0.
* Rename `Float::abs_diff` as `Float::pos_diff`.
* Replace `Float::get_sign` with `Float::is_sign_positive` and
  `Float::is_sign_negative`.
* Add various `as_neg`, `as_abs` and `as_conj` methods.
* Add `OrdFloat` and `OrdComplex` for complete ordering.