diff --git a/README.md b/README.md index 2022308..6a6d6bc 100644 --- a/README.md +++ b/README.md @@ -86,6 +86,9 @@ The conversions supported cover the following cases. * [`saturating_div_euclid`] * [`wrapping_div_euclid`] * [`overflowing_div_euclid`] + * The following methods were added to the [`Wrapping`] wrapper: + * [`div_euclid`][wde], [`rem_euclid`][wre] + * [`div_euclid_int`][wdei], [`rem_euclid_int`][wrei] [`RemAssign`]: https://doc.rust-lang.org/nightly/core/ops/trait.RemAssign.html [`Rem`]: https://doc.rust-lang.org/nightly/core/ops/trait.Rem.html @@ -99,6 +102,10 @@ The conversions supported cover the following cases. [`saturating_div_euclid`]: https://docs.rs/fixed/0.5.3/fixed/struct.FixedI32.html#method.saturating_div_euclid [`wrapping_div_euclid`]: https://docs.rs/fixed/0.5.3/fixed/struct.FixedI32.html#method.wrapping_div_euclid [issue 13]: https://gitlab.com/tspiteri/fixed/issues/13 +[wde]: https://docs.rs/fixed/0.5.3/fixed/struct.Wrapping.html#method.div_euclid +[wdei]: https://docs.rs/fixed/0.5.3/fixed/struct.Wrapping.html#method.div_euclid_int +[wre]: https://docs.rs/fixed/0.5.3/fixed/struct.Wrapping.html#method.rem_euclid +[wrei]: https://docs.rs/fixed/0.5.3/fixed/struct.Wrapping.html#method.rem_euclid_int ### Version 0.5.2 news (2020-02-02) diff --git a/RELEASES.md b/RELEASES.md index 0403360..5fe83bb 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -24,6 +24,9 @@ Version 0.5.3 (unreleased) * `saturating_div_euclid` * `wrapping_div_euclid` * `overflowing_div_euclid` + * The following methods were added to the `Wrapping` wrapper: + * `div_euclid`, `rem_euclid` + * `div_euclid_int`, `rem_euclid_int` Version 0.5.2 (2020-02-02) ========================== @@ -113,13 +116,12 @@ Version 0.4.3 (2019-08-20) Version 0.4.2 (2019-08-16) ========================== - * The new methods [`from_num`] and [`to_num`] together with their + * The new methods `from_num` and `to_num` together with their checked versions were added to all fixed-point numbers. * The methods `from_fixed`, `to_fixed`, `from_int`, `to_int`, `from_float`, and `to_float`, and their checked versions, were deprecated. - * The new method [`from_num`][`Wrapping::from_num`] was added to the - [`Wrapping`] wrapper. + * The new method `from_num` was added to the `Wrapping` wrapper. * Bug fix: parsing of decimal fractions was fixed to give correctly rounded results for long decimal fraction strings, for example with four fractional bits, 0.96874999… (just below 31⁄32) and diff --git a/src/wrapping.rs b/src/wrapping.rs index 7be0a77..23d7338 100644 --- a/src/wrapping.rs +++ b/src/wrapping.rs @@ -566,6 +566,45 @@ impl Wrapping { pub fn rem_euclid(self, divisor: Wrapping) -> Wrapping { Wrapping(self.0.rem_euclid(divisor.0)) } + + /// Euclidean division by an integer. + /// + /// # Panics + /// + /// Panics if the divisor is zero. + /// + /// # Examples + /// + /// ```rust + /// use fixed::{types::I16F16, Wrapping}; + /// let num = Wrapping(I16F16::from_num(7.5)); + /// assert_eq!(num.div_euclid_int(2), Wrapping(I16F16::from_num(3))); + /// let min = Wrapping(I16F16::min_value()); + /// assert_eq!(min.div_euclid_int(-1), min); + /// ``` + #[inline] + pub fn div_euclid_int(self, divisor: F::Bits) -> Wrapping { + Wrapping(self.0.wrapping_div_euclid_int(divisor)) + } + + /// Remainder for Euclidean division. + /// + /// # Panics + /// + /// Panics if the divisor is zero. + /// + /// # Examples + /// + /// ```rust + /// use fixed::{types::I16F16, Wrapping}; + /// let num = Wrapping(I16F16::from_num(7.5)); + /// assert_eq!(num.rem_euclid_int(2), Wrapping(I16F16::from_num(1.5))); + /// assert_eq!((-num).rem_euclid_int(2), Wrapping(I16F16::from_num(0.5))); + /// ``` + #[inline] + pub fn rem_euclid_int(self, divisor: F::Bits) -> Wrapping { + Wrapping(self.0.rem_euclid_int(divisor)) + } } impl Wrapping {