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

pub trait Div<Rhs = Self> {
    type Output;
    #[must_use]
    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));
Run

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] });
Run

Associated Types

The resulting type after applying the / operator.

Required methods

Performs the / operation.

Example

assert_eq!(12 / 2, 6);
Run

Implementors

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, 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, 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.

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 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 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.

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.

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.

Panics

This operation will panic if other == 0.