pub trait Mul<Rhs = Self> {
type Output;
// Required method
fn mul(self, rhs: Rhs) -> Self::Output;
}Expand description
The multiplication operator *.
Note that Rhs is Self by default, but this is not mandatory.
§Examples
§Multipliable rational numbers
use std::ops::Mul;
// 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 Mul for Rational {
// The multiplication of rational numbers is a closed operation.
type Output = Self;
fn mul(self, rhs: Self) -> Self {
let numerator = self.numerator * rhs.numerator;
let denominator = self.denominator * rhs.denominator;
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(2, 3) * Rational::new(3, 4),
Rational::new(1, 2));§Multiplying vectors by scalars as in linear algebra
use std::ops::Mul;
struct Scalar { value: usize }
#[derive(Debug, PartialEq)]
struct Vector { value: Vec<usize> }
impl Mul<Scalar> for Vector {
type Output = Self;
fn mul(self, rhs: Scalar) -> Self::Output {
Self { value: self.value.iter().map(|v| v * rhs.value).collect() }
}
}
let vector = Vector { value: vec![2, 4, 6] };
let scalar = Scalar { value: 3 };
assert_eq!(vector * scalar, Vector { value: vec![6, 12, 18] });Required Associated Types§
Required Methods§
Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".
Implementors§
Source§impl Mul for BoxedMontyForm
impl Mul for BoxedMontyForm
type Output = BoxedMontyForm
1.74.0 (const: unstable) · Source§impl Mul for Saturating<i128>
impl Mul for Saturating<i128>
type Output = Saturating<i128>
1.74.0 (const: unstable) · Source§impl Mul for Saturating<isize>
impl Mul for Saturating<isize>
type Output = Saturating<isize>
1.74.0 (const: unstable) · Source§impl Mul for Saturating<u128>
impl Mul for Saturating<u128>
type Output = Saturating<u128>
1.74.0 (const: unstable) · Source§impl Mul for Saturating<usize>
impl Mul for Saturating<usize>
type Output = Saturating<usize>
Source§impl Mul<&BoxedMontyForm> for &BoxedMontyForm
impl Mul<&BoxedMontyForm> for &BoxedMontyForm
type Output = BoxedMontyForm
Source§impl Mul<&BoxedMontyForm> for BoxedMontyForm
impl Mul<&BoxedMontyForm> for BoxedMontyForm
type Output = BoxedMontyForm
1.74.0 (const: unstable) · Source§impl Mul<&Saturating<i8>> for &Saturating<i8>
impl Mul<&Saturating<i8>> for &Saturating<i8>
1.74.0 (const: unstable) · Source§impl Mul<&Saturating<i8>> for Saturating<i8>
impl Mul<&Saturating<i8>> for Saturating<i8>
1.74.0 (const: unstable) · Source§impl Mul<&Saturating<i16>> for &Saturating<i16>
impl Mul<&Saturating<i16>> for &Saturating<i16>
1.74.0 (const: unstable) · Source§impl Mul<&Saturating<i16>> for Saturating<i16>
impl Mul<&Saturating<i16>> for Saturating<i16>
1.74.0 (const: unstable) · Source§impl Mul<&Saturating<i32>> for &Saturating<i32>
impl Mul<&Saturating<i32>> for &Saturating<i32>
1.74.0 (const: unstable) · Source§impl Mul<&Saturating<i32>> for Saturating<i32>
impl Mul<&Saturating<i32>> for Saturating<i32>
1.74.0 (const: unstable) · Source§impl Mul<&Saturating<i64>> for &Saturating<i64>
impl Mul<&Saturating<i64>> for &Saturating<i64>
1.74.0 (const: unstable) · Source§impl Mul<&Saturating<i64>> for Saturating<i64>
impl Mul<&Saturating<i64>> for Saturating<i64>
1.74.0 (const: unstable) · Source§impl Mul<&Saturating<i128>> for &Saturating<i128>
impl Mul<&Saturating<i128>> for &Saturating<i128>
1.74.0 (const: unstable) · Source§impl Mul<&Saturating<i128>> for Saturating<i128>
impl Mul<&Saturating<i128>> for Saturating<i128>
1.74.0 (const: unstable) · Source§impl Mul<&Saturating<isize>> for &Saturating<isize>
impl Mul<&Saturating<isize>> for &Saturating<isize>
1.74.0 (const: unstable) · Source§impl Mul<&Saturating<isize>> for Saturating<isize>
impl Mul<&Saturating<isize>> for Saturating<isize>
1.74.0 (const: unstable) · Source§impl Mul<&Saturating<u8>> for &Saturating<u8>
impl Mul<&Saturating<u8>> for &Saturating<u8>
1.74.0 (const: unstable) · Source§impl Mul<&Saturating<u8>> for Saturating<u8>
impl Mul<&Saturating<u8>> for Saturating<u8>
1.74.0 (const: unstable) · Source§impl Mul<&Saturating<u16>> for &Saturating<u16>
impl Mul<&Saturating<u16>> for &Saturating<u16>
1.74.0 (const: unstable) · Source§impl Mul<&Saturating<u16>> for Saturating<u16>
impl Mul<&Saturating<u16>> for Saturating<u16>
1.74.0 (const: unstable) · Source§impl Mul<&Saturating<u32>> for &Saturating<u32>
impl Mul<&Saturating<u32>> for &Saturating<u32>
1.74.0 (const: unstable) · Source§impl Mul<&Saturating<u32>> for Saturating<u32>
impl Mul<&Saturating<u32>> for Saturating<u32>
1.74.0 (const: unstable) · Source§impl Mul<&Saturating<u64>> for &Saturating<u64>
impl Mul<&Saturating<u64>> for &Saturating<u64>
1.74.0 (const: unstable) · Source§impl Mul<&Saturating<u64>> for Saturating<u64>
impl Mul<&Saturating<u64>> for Saturating<u64>
1.74.0 (const: unstable) · Source§impl Mul<&Saturating<u128>> for &Saturating<u128>
impl Mul<&Saturating<u128>> for &Saturating<u128>
1.74.0 (const: unstable) · Source§impl Mul<&Saturating<u128>> for Saturating<u128>
impl Mul<&Saturating<u128>> for Saturating<u128>
1.74.0 (const: unstable) · Source§impl Mul<&Saturating<usize>> for &Saturating<usize>
impl Mul<&Saturating<usize>> for &Saturating<usize>
1.74.0 (const: unstable) · Source§impl Mul<&Saturating<usize>> for Saturating<usize>
impl Mul<&Saturating<usize>> for Saturating<usize>
1.14.0 (const: unstable) · Source§impl Mul<&Wrapping<i128>> for &core::num::wrapping::Wrapping<i128>
impl Mul<&Wrapping<i128>> for &core::num::wrapping::Wrapping<i128>
1.14.0 (const: unstable) · Source§impl Mul<&Wrapping<isize>> for &core::num::wrapping::Wrapping<isize>
impl Mul<&Wrapping<isize>> for &core::num::wrapping::Wrapping<isize>
1.14.0 (const: unstable) · Source§impl Mul<&Wrapping<isize>> for core::num::wrapping::Wrapping<isize>
impl Mul<&Wrapping<isize>> for core::num::wrapping::Wrapping<isize>
1.14.0 (const: unstable) · Source§impl Mul<&Wrapping<u128>> for &core::num::wrapping::Wrapping<u128>
impl Mul<&Wrapping<u128>> for &core::num::wrapping::Wrapping<u128>
1.14.0 (const: unstable) · Source§impl Mul<&Wrapping<usize>> for &core::num::wrapping::Wrapping<usize>
impl Mul<&Wrapping<usize>> for &core::num::wrapping::Wrapping<usize>
1.14.0 (const: unstable) · Source§impl Mul<&Wrapping<usize>> for core::num::wrapping::Wrapping<usize>
impl Mul<&Wrapping<usize>> for core::num::wrapping::Wrapping<usize>
Source§impl Mul<BoxedMontyForm> for &BoxedMontyForm
impl Mul<BoxedMontyForm> for &BoxedMontyForm
type Output = BoxedMontyForm
1.74.0 (const: unstable) · Source§impl Mul<Saturating<i8>> for &Saturating<i8>
impl Mul<Saturating<i8>> for &Saturating<i8>
1.74.0 (const: unstable) · Source§impl Mul<Saturating<i16>> for &Saturating<i16>
impl Mul<Saturating<i16>> for &Saturating<i16>
1.74.0 (const: unstable) · Source§impl Mul<Saturating<i32>> for &Saturating<i32>
impl Mul<Saturating<i32>> for &Saturating<i32>
1.74.0 (const: unstable) · Source§impl Mul<Saturating<i64>> for &Saturating<i64>
impl Mul<Saturating<i64>> for &Saturating<i64>
1.74.0 (const: unstable) · Source§impl Mul<Saturating<i128>> for &Saturating<i128>
impl Mul<Saturating<i128>> for &Saturating<i128>
1.74.0 (const: unstable) · Source§impl Mul<Saturating<isize>> for &Saturating<isize>
impl Mul<Saturating<isize>> for &Saturating<isize>
1.74.0 (const: unstable) · Source§impl Mul<Saturating<u8>> for &Saturating<u8>
impl Mul<Saturating<u8>> for &Saturating<u8>
1.74.0 (const: unstable) · Source§impl Mul<Saturating<u16>> for &Saturating<u16>
impl Mul<Saturating<u16>> for &Saturating<u16>
1.74.0 (const: unstable) · Source§impl Mul<Saturating<u32>> for &Saturating<u32>
impl Mul<Saturating<u32>> for &Saturating<u32>
1.74.0 (const: unstable) · Source§impl Mul<Saturating<u64>> for &Saturating<u64>
impl Mul<Saturating<u64>> for &Saturating<u64>
1.74.0 (const: unstable) · Source§impl Mul<Saturating<u128>> for &Saturating<u128>
impl Mul<Saturating<u128>> for &Saturating<u128>
1.74.0 (const: unstable) · Source§impl Mul<Saturating<usize>> for &Saturating<usize>
impl Mul<Saturating<usize>> for &Saturating<usize>
1.14.0 (const: unstable) · Source§impl Mul<Wrapping<isize>> for &core::num::wrapping::Wrapping<isize>
impl Mul<Wrapping<isize>> for &core::num::wrapping::Wrapping<isize>
1.14.0 (const: unstable) · Source§impl Mul<Wrapping<usize>> for &core::num::wrapping::Wrapping<usize>
impl Mul<Wrapping<usize>> for &core::num::wrapping::Wrapping<usize>
Source§impl<MOD: ConstMontyParams<LIMBS>, const LIMBS: usize> Mul for ConstMontyForm<MOD, LIMBS>
impl<MOD: ConstMontyParams<LIMBS>, const LIMBS: usize> Mul for ConstMontyForm<MOD, LIMBS>
type Output = ConstMontyForm<MOD, LIMBS>
Source§impl<MOD: ConstMontyParams<LIMBS>, const LIMBS: usize> Mul<&ConstMontyForm<MOD, LIMBS>> for &ConstMontyForm<MOD, LIMBS>
impl<MOD: ConstMontyParams<LIMBS>, const LIMBS: usize> Mul<&ConstMontyForm<MOD, LIMBS>> for &ConstMontyForm<MOD, LIMBS>
type Output = ConstMontyForm<MOD, LIMBS>
Source§impl<MOD: ConstMontyParams<LIMBS>, const LIMBS: usize> Mul<&ConstMontyForm<MOD, LIMBS>> for ConstMontyForm<MOD, LIMBS>
impl<MOD: ConstMontyParams<LIMBS>, const LIMBS: usize> Mul<&ConstMontyForm<MOD, LIMBS>> for ConstMontyForm<MOD, LIMBS>
type Output = ConstMontyForm<MOD, LIMBS>
Source§impl<MOD: ConstMontyParams<LIMBS>, const LIMBS: usize> Mul<ConstMontyForm<MOD, LIMBS>> for &ConstMontyForm<MOD, LIMBS>
impl<MOD: ConstMontyParams<LIMBS>, const LIMBS: usize> Mul<ConstMontyForm<MOD, LIMBS>> for &ConstMontyForm<MOD, LIMBS>
type Output = ConstMontyForm<MOD, LIMBS>
Source§impl<T> Mul for NonZero<T>where
T: Mul<T, Output = T>,
Any non-zero integer multiplied by another non-zero integer is definitionally non-zero.
impl<T> Mul for NonZero<T>where
T: Mul<T, Output = T>,
Any non-zero integer multiplied by another non-zero integer is definitionally non-zero.
Source§impl<T> Mul for Odd<T>where
T: Mul<T, Output = T>,
Any odd integer multiplied by another odd integer is definitionally odd.
impl<T> Mul for Odd<T>where
T: Mul<T, Output = T>,
Any odd integer multiplied by another odd integer is definitionally odd.
Source§impl<Ul, B, Ur> Mul<UInt<Ur, B>> for UInt<Ul, B0>
UInt<Ul, B0> * UInt<Ur, B> = UInt<(Ul * UInt<Ur, B>), B0>
impl<Ul, B, Ur> Mul<UInt<Ur, B>> for UInt<Ul, B0>
UInt<Ul, B0> * UInt<Ur, B> = UInt<(Ul * UInt<Ur, B>), B0>
Source§impl<Ul, B, Ur> Mul<UInt<Ur, B>> for UInt<Ul, B1>
UInt<Ul, B1> * UInt<Ur, B> = UInt<(Ul * UInt<Ur, B>), B0> + UInt<Ur, B>
impl<Ul, B, Ur> Mul<UInt<Ur, B>> for UInt<Ul, B1>
UInt<Ul, B1> * UInt<Ur, B> = UInt<(Ul * UInt<Ur, B>), B0> + UInt<Ur, B>