Trait sp_std::ops::Div1.0.0[][src]

pub trait Div<Rhs = Self> {
    type Output;
    fn div(self, rhs: Rhs) -> Self::Output;
}
Expand description

The division operator /.

Note that Rhs is Self by default, but this is not mandatory.

Examples

Dividable rational numbers

use std::ops::Div;

// By the fundamental theorem of arithmetic, rational numbers in lowest
// terms are unique. So, by keeping `Rational`s in reduced form, we can
// derive `Eq` and `PartialEq`.
#[derive(Debug, Eq, PartialEq)]
struct Rational {
    numerator: usize,
    denominator: usize,
}

impl Rational {
    fn new(numerator: usize, denominator: usize) -> Self {
        if denominator == 0 {
            panic!("Zero is an invalid denominator!");
        }

        // Reduce to lowest terms by dividing by the greatest common
        // divisor.
        let gcd = gcd(numerator, denominator);
        Self {
            numerator: numerator / gcd,
            denominator: denominator / gcd,
        }
    }
}

impl Div for Rational {
    // The division of rational numbers is a closed operation.
    type Output = Self;

    fn div(self, rhs: Self) -> Self::Output {
        if rhs.numerator == 0 {
            panic!("Cannot divide by zero-valued `Rational`!");
        }

        let numerator = self.numerator * rhs.denominator;
        let denominator = self.denominator * rhs.numerator;
        Self::new(numerator, denominator)
    }
}

// Euclid's two-thousand-year-old algorithm for finding the greatest common
// divisor.
fn gcd(x: usize, y: usize) -> usize {
    let mut x = x;
    let mut y = y;
    while y != 0 {
        let t = y;
        y = x % y;
        x = t;
    }
    x
}

assert_eq!(Rational::new(1, 2), Rational::new(2, 4));
assert_eq!(Rational::new(1, 2) / Rational::new(3, 4),
           Rational::new(2, 3));

Dividing vectors by scalars as in linear algebra

use std::ops::Div;

struct Scalar { value: f32 }

#[derive(Debug, PartialEq)]
struct Vector { value: Vec<f32> }

impl Div<Scalar> for Vector {
    type Output = Self;

    fn div(self, rhs: Scalar) -> Self::Output {
        Self { value: self.value.iter().map(|v| v / rhs.value).collect() }
    }
}

let scalar = Scalar { value: 2f32 };
let vector = Vector { value: vec![2f32, 4f32, 6f32] };
assert_eq!(vector / scalar, Vector { value: vec![1f32, 2f32, 3f32] });

Associated Types

The resulting type after applying the / operator.

Required methods

Performs the / operation.

Example

assert_eq!(12 / 2, 6);

Implementations on Foreign Types

This operation rounds towards zero, truncating any fractional part of the exact result.

Panics

This operation will panic if other == 0 or the division results in overflow.

This operation rounds towards zero, truncating any fractional part of the exact result, and cannot panic.

This operation rounds towards zero, truncating any fractional part of the exact result.

Panics

This operation will panic if other == 0.

This operation rounds towards zero, truncating any fractional part of the exact result.

Panics

This operation will panic if other == 0.

This operation rounds towards zero, truncating any fractional part of the exact result, and cannot panic.

This operation rounds towards zero, truncating any fractional part of the exact result, and cannot panic.

This operation rounds towards zero, truncating any fractional part of the exact result.

Panics

This operation will panic if other == 0 or the division results in overflow.

This operation rounds towards zero, truncating any fractional part of the exact result, and cannot panic.

This operation rounds towards zero, truncating any fractional part of the exact result.

Panics

This operation will panic if other == 0 or the division results in overflow.

This operation rounds towards zero, truncating any fractional part of the exact result.

Panics

This operation will panic if other == 0 or the division results in overflow.

This operation rounds towards zero, truncating any fractional part of the exact result.

Panics

This operation will panic if other == 0.

This operation rounds towards zero, truncating any fractional part of the exact result, and cannot panic.

This operation rounds towards zero, truncating any fractional part of the exact result.

Panics

This operation will panic if other == 0.

This operation rounds towards zero, truncating any fractional part of the exact result.

Panics

This operation will panic if other == 0 or the division results in overflow.

This operation rounds towards zero, truncating any fractional part of the exact result.

Panics

This operation will panic if other == 0 or the division results in overflow.

This operation rounds towards zero, truncating any fractional part of the exact result.

Panics

This operation will panic if other == 0.

This operation rounds towards zero, truncating any fractional part of the exact result, and cannot panic.

This operation rounds towards zero, truncating any fractional part of the exact result.

Panics

This operation will panic if other == 0.

Implementors

impl Div<Percent> for Percent

impl<N> Div<N> for Percent where
    u8: TryFrom<N>, 

impl Div<PerU16> for PerU16

impl<N> Div<N> for PerU16 where
    u16: TryFrom<N>, 

impl Div<Permill> for Permill

impl<N> Div<N> for Permill where
    u32: TryFrom<N>, 

impl Div<Perbill> for Perbill

impl<N> Div<N> for Perbill where
    u32: TryFrom<N>, 

impl Div<Perquintill> for Perquintill

impl<N> Div<N> for Perquintill where
    u64: TryFrom<N>, 

impl Div<FixedI64> for FixedI64

impl Div<FixedI128> for FixedI128

impl Div<FixedU128> for FixedU128