pub trait Div<Rhs = Self> {
type Output;
// Required method
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
§Div
idable 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] });
Required Associated Types§
Required Methods§
Implementors§
1.0.0 · Source§impl Div for i8
This operation rounds towards zero, truncating any
fractional part of the exact result.
impl Div for i8
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.
1.0.0 · Source§impl Div for i16
This operation rounds towards zero, truncating any
fractional part of the exact result.
impl Div for i16
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.
1.0.0 · Source§impl Div for i32
This operation rounds towards zero, truncating any
fractional part of the exact result.
impl Div for i32
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.
1.0.0 · Source§impl Div for i64
This operation rounds towards zero, truncating any
fractional part of the exact result.
impl Div for i64
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.
1.0.0 · Source§impl Div for i128
This operation rounds towards zero, truncating any
fractional part of the exact result.
impl Div for i128
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.
1.0.0 · Source§impl Div for isize
This operation rounds towards zero, truncating any
fractional part of the exact result.
impl Div for isize
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.
1.0.0 · Source§impl Div for u8
This operation rounds towards zero, truncating any
fractional part of the exact result.
impl Div for u8
This operation rounds towards zero, truncating any fractional part of the exact result.
§Panics
This operation will panic if other == 0
.
1.0.0 · Source§impl Div for u16
This operation rounds towards zero, truncating any
fractional part of the exact result.
impl Div for u16
This operation rounds towards zero, truncating any fractional part of the exact result.
§Panics
This operation will panic if other == 0
.
1.0.0 · Source§impl Div for u32
This operation rounds towards zero, truncating any
fractional part of the exact result.
impl Div for u32
This operation rounds towards zero, truncating any fractional part of the exact result.
§Panics
This operation will panic if other == 0
.
1.0.0 · Source§impl Div for u64
This operation rounds towards zero, truncating any
fractional part of the exact result.
impl Div for u64
This operation rounds towards zero, truncating any fractional part of the exact result.
§Panics
This operation will panic if other == 0
.
1.0.0 · Source§impl Div for u128
This operation rounds towards zero, truncating any
fractional part of the exact result.
impl Div for u128
This operation rounds towards zero, truncating any fractional part of the exact result.
§Panics
This operation will panic if other == 0
.
1.0.0 · Source§impl Div for usize
This operation rounds towards zero, truncating any
fractional part of the exact result.
impl Div for usize
This operation rounds towards zero, truncating any fractional part of the exact result.
§Panics
This operation will panic if other == 0
.
1.74.0 · Source§impl Div for Saturating<i8>
§Examples
Basic usage:
impl Div for Saturating<i8>
§Examples
Basic usage:
type Output = Saturating<i8>
1.74.0 · Source§impl Div for Saturating<i16>
§Examples
Basic usage:
impl Div for Saturating<i16>
§Examples
Basic usage:
type Output = Saturating<i16>
1.74.0 · Source§impl Div for Saturating<i32>
§Examples
Basic usage:
impl Div for Saturating<i32>
§Examples
Basic usage:
type Output = Saturating<i32>
1.74.0 · Source§impl Div for Saturating<i64>
§Examples
Basic usage:
impl Div for Saturating<i64>
§Examples
Basic usage:
type Output = Saturating<i64>
1.74.0 · Source§impl Div for Saturating<i128>
§Examples
Basic usage:
impl Div for Saturating<i128>
§Examples
Basic usage:
type Output = Saturating<i128>
1.74.0 · Source§impl Div for Saturating<isize>
§Examples
Basic usage:
impl Div for Saturating<isize>
§Examples
Basic usage:
type Output = Saturating<isize>
1.74.0 · Source§impl Div for Saturating<u8>
§Examples
Basic usage:
impl Div for Saturating<u8>
§Examples
Basic usage:
type Output = Saturating<u8>
1.74.0 · Source§impl Div for Saturating<u16>
§Examples
Basic usage:
impl Div for Saturating<u16>
§Examples
Basic usage:
type Output = Saturating<u16>
1.74.0 · Source§impl Div for Saturating<u32>
§Examples
Basic usage:
impl Div for Saturating<u32>
§Examples
Basic usage:
type Output = Saturating<u32>
1.74.0 · Source§impl Div for Saturating<u64>
§Examples
Basic usage:
impl Div for Saturating<u64>
§Examples
Basic usage:
type Output = Saturating<u64>
1.74.0 · Source§impl Div for Saturating<u128>
§Examples
Basic usage:
impl Div for Saturating<u128>
§Examples
Basic usage:
type Output = Saturating<u128>
1.74.0 · Source§impl Div for Saturating<usize>
§Examples
Basic usage:
impl Div for Saturating<usize>
§Examples
Basic usage: