2018-02-18 19:29:21 +00:00
|
|
|
/// Unary operator for retrieving the multiplicative inverse, or reciprocal, of a value.
|
|
|
|
pub trait Inv {
|
|
|
|
/// The result after applying the operator.
|
|
|
|
type Output;
|
|
|
|
|
2018-02-19 20:00:36 +00:00
|
|
|
/// Returns the multiplicative inverse of `self`.
|
|
|
|
///
|
|
|
|
/// # Examples
|
|
|
|
///
|
|
|
|
/// ```
|
|
|
|
/// use num_traits::{Inv, One};
|
|
|
|
///
|
|
|
|
/// let x = 7.0;
|
|
|
|
/// let y = -0.0;
|
|
|
|
/// assert_eq!(x.inv() * x, One::one());
|
|
|
|
/// assert_eq!(y.inv() * y, One::one());
|
|
|
|
/// ```
|
2018-02-18 19:29:21 +00:00
|
|
|
fn inv(self) -> Self::Output;
|
|
|
|
}
|
|
|
|
|
2018-02-19 20:00:36 +00:00
|
|
|
impl Inv for f32 {
|
|
|
|
type Output = f32;
|
|
|
|
#[inline]
|
|
|
|
fn inv(self) -> f32 { 1.0 / self }
|
2018-02-18 19:29:21 +00:00
|
|
|
}
|
2018-02-19 20:00:36 +00:00
|
|
|
impl Inv for f64 {
|
|
|
|
type Output = f64;
|
|
|
|
#[inline]
|
|
|
|
fn inv(self) -> f64 { 1.0 / self }
|
|
|
|
}
|
|
|
|
impl<'a> Inv for &'a f32 {
|
|
|
|
type Output = f32;
|
|
|
|
#[inline]
|
|
|
|
fn inv(self) -> f32 { 1.0 / *self }
|
|
|
|
}
|
|
|
|
impl<'a> Inv for &'a f64 {
|
|
|
|
type Output = f64;
|
|
|
|
#[inline]
|
|
|
|
fn inv(self) -> f64 { 1.0 / *self }
|
2018-02-18 19:29:21 +00:00
|
|
|
}
|