[][src]Trait rug::ops::DivRounding

pub trait DivRounding<Rhs = Self> {
    type Output;
    fn div_trunc(self, rhs: Rhs) -> Self::Output;
fn div_ceil(self, rhs: Rhs) -> Self::Output;
fn div_floor(self, rhs: Rhs) -> Self::Output;
fn div_euc(self, rhs: Rhs) -> Self::Output; }

Rounding variants of division.

Examples

use rug::ops::DivRounding;
struct I(i32);
impl DivRounding<i32> for I {
    type Output = i32;
    fn div_trunc(self, rhs: i32) -> i32 {
        self.0 / rhs
    }
    fn div_ceil(self, rhs: i32) -> i32 {
        let (q, r) = (self.0 / rhs, self.0 % rhs);
        let change = if rhs > 0 { r > 0 } else { r < 0 };
        if change {
            q + 1
        } else {
            q
        }
    }
    fn div_floor(self, rhs: i32) -> i32 {
        let (q, r) = (self.0 / rhs, self.0 % rhs);
        let change = if rhs > 0 { r < 0 } else { r > 0 };
        if change {
            q - 1
        } else {
            q
        }
    }
    fn div_euc(self, rhs: i32) -> i32 {
        let (q, r) = (self.0 / rhs, self.0 % rhs);
        if r < 0 {
            if rhs < 0 {
                q + 1
            } else {
                q - 1
            }
        } else {
            q
        }
    }
}
assert_eq!(I(-10).div_trunc(-3), 3);
assert_eq!(I(-10).div_ceil(-3), 4);
assert_eq!(I(-10).div_floor(-3), 3);
assert_eq!(I(-10).div_euc(-3), 4);

Associated Types

type Output

The resulting type from the division operation.

Loading content...

Required methods

fn div_trunc(self, rhs: Rhs) -> Self::Output

Performs division, rounding the quotient towards zero.

fn div_ceil(self, rhs: Rhs) -> Self::Output

Performs division, rounding the quotient up.

fn div_floor(self, rhs: Rhs) -> Self::Output

Performs division, rounding the quotient down.

fn div_euc(self, rhs: Rhs) -> Self::Output

Performs Euclidean division, rounding the quotient so that the remainder cannot be negative.

Loading content...

Implementations on Foreign Types

impl DivRounding<i8> for i8
[src]

type Output = i8

impl<'a> DivRounding<&'a i8> for i8
[src]

type Output = <i8 as DivRounding>::Output

impl<'a> DivRounding<i8> for &'a i8
[src]

type Output = <i8 as DivRounding>::Output

impl<'a, 'b> DivRounding<&'a i8> for &'b i8
[src]

type Output = <i8 as DivRounding>::Output

impl DivRounding<i16> for i16
[src]

type Output = i16

impl<'a> DivRounding<&'a i16> for i16
[src]

type Output = <i16 as DivRounding>::Output

impl<'a> DivRounding<i16> for &'a i16
[src]

type Output = <i16 as DivRounding>::Output

impl<'a, 'b> DivRounding<&'a i16> for &'b i16
[src]

type Output = <i16 as DivRounding>::Output

impl DivRounding<i32> for i32
[src]

type Output = i32

impl<'a> DivRounding<&'a i32> for i32
[src]

type Output = <i32 as DivRounding>::Output

impl<'a> DivRounding<i32> for &'a i32
[src]

type Output = <i32 as DivRounding>::Output

impl<'a, 'b> DivRounding<&'a i32> for &'b i32
[src]

type Output = <i32 as DivRounding>::Output

impl DivRounding<i64> for i64
[src]

type Output = i64

impl<'a> DivRounding<&'a i64> for i64
[src]

type Output = <i64 as DivRounding>::Output

impl<'a> DivRounding<i64> for &'a i64
[src]

type Output = <i64 as DivRounding>::Output

impl<'a, 'b> DivRounding<&'a i64> for &'b i64
[src]

type Output = <i64 as DivRounding>::Output

impl DivRounding<i128> for i128
[src]

type Output = i128

impl<'a> DivRounding<&'a i128> for i128
[src]

type Output = <i128 as DivRounding>::Output

impl<'a> DivRounding<i128> for &'a i128
[src]

type Output = <i128 as DivRounding>::Output

impl<'a, 'b> DivRounding<&'a i128> for &'b i128
[src]

type Output = <i128 as DivRounding>::Output

impl DivRounding<isize> for isize
[src]

type Output = isize

impl<'a> DivRounding<&'a isize> for isize
[src]

type Output = <isize as DivRounding>::Output

impl<'a> DivRounding<isize> for &'a isize
[src]

type Output = <isize as DivRounding>::Output

impl<'a, 'b> DivRounding<&'a isize> for &'b isize
[src]

type Output = <isize as DivRounding>::Output

impl DivRounding<u8> for u8
[src]

type Output = u8

impl<'a> DivRounding<&'a u8> for u8
[src]

type Output = <u8 as DivRounding>::Output

impl<'a> DivRounding<u8> for &'a u8
[src]

type Output = <u8 as DivRounding>::Output

impl<'a, 'b> DivRounding<&'a u8> for &'b u8
[src]

type Output = <u8 as DivRounding>::Output

impl DivRounding<u16> for u16
[src]

type Output = u16

impl<'a> DivRounding<&'a u16> for u16
[src]

type Output = <u16 as DivRounding>::Output

impl<'a> DivRounding<u16> for &'a u16
[src]

type Output = <u16 as DivRounding>::Output

impl<'a, 'b> DivRounding<&'a u16> for &'b u16
[src]

type Output = <u16 as DivRounding>::Output

impl DivRounding<u32> for u32
[src]

type Output = u32

impl<'a> DivRounding<&'a u32> for u32
[src]

type Output = <u32 as DivRounding>::Output

impl<'a> DivRounding<u32> for &'a u32
[src]

type Output = <u32 as DivRounding>::Output

impl<'a, 'b> DivRounding<&'a u32> for &'b u32
[src]

type Output = <u32 as DivRounding>::Output

impl DivRounding<u64> for u64
[src]

type Output = u64

impl<'a> DivRounding<&'a u64> for u64
[src]

type Output = <u64 as DivRounding>::Output

impl<'a> DivRounding<u64> for &'a u64
[src]

type Output = <u64 as DivRounding>::Output

impl<'a, 'b> DivRounding<&'a u64> for &'b u64
[src]

type Output = <u64 as DivRounding>::Output

impl DivRounding<u128> for u128
[src]

type Output = u128

impl<'a> DivRounding<&'a u128> for u128
[src]

type Output = <u128 as DivRounding>::Output

impl<'a> DivRounding<u128> for &'a u128
[src]

type Output = <u128 as DivRounding>::Output

impl<'a, 'b> DivRounding<&'a u128> for &'b u128
[src]

type Output = <u128 as DivRounding>::Output

impl DivRounding<usize> for usize
[src]

type Output = usize

impl<'a> DivRounding<&'a usize> for usize
[src]

type Output = <usize as DivRounding>::Output

impl<'a> DivRounding<usize> for &'a usize
[src]

type Output = <usize as DivRounding>::Output

impl<'a, 'b> DivRounding<&'a usize> for &'b usize
[src]

type Output = <usize as DivRounding>::Output

impl DivRounding<f32> for f32
[src]

type Output = f32

impl<'a> DivRounding<&'a f32> for f32
[src]

type Output = <f32 as DivRounding>::Output

impl<'a> DivRounding<f32> for &'a f32
[src]

type Output = <f32 as DivRounding>::Output

impl<'a, 'b> DivRounding<&'a f32> for &'b f32
[src]

type Output = <f32 as DivRounding>::Output

impl DivRounding<f64> for f64
[src]

type Output = f64

impl<'a> DivRounding<&'a f64> for f64
[src]

type Output = <f64 as DivRounding>::Output

impl<'a> DivRounding<f64> for &'a f64
[src]

type Output = <f64 as DivRounding>::Output

impl<'a, 'b> DivRounding<&'a f64> for &'b f64
[src]

type Output = <f64 as DivRounding>::Output

impl DivRounding<Integer> for i32
[src]

type Output = Integer

impl<'i> DivRounding<&'i Integer> for i32
[src]

type Output = DivRoundingFromI32Incomplete<'i>

impl<'t> DivRounding<Integer> for &'t i32
[src]

type Output = Integer

impl<'i, 't> DivRounding<&'i Integer> for &'t i32
[src]

type Output = DivRoundingFromI32Incomplete<'i>

impl DivRounding<Integer> for u32
[src]

type Output = Integer

impl<'i> DivRounding<&'i Integer> for u32
[src]

type Output = DivRoundingFromU32Incomplete<'i>

impl<'t> DivRounding<Integer> for &'t u32
[src]

type Output = Integer

impl<'i, 't> DivRounding<&'i Integer> for &'t u32
[src]

type Output = DivRoundingFromU32Incomplete<'i>

Loading content...

Implementors

impl DivRounding<i32> for Integer
[src]

type Output = Integer

impl DivRounding<u32> for Integer
[src]

type Output = Integer

impl DivRounding<Integer> for Integer
[src]

type Output = Integer

impl<'i> DivRounding<&'i Integer> for &'i Integer
[src]

type Output = DivRoundingIncomplete<'i>

impl<'i> DivRounding<&'i Integer> for Integer
[src]

type Output = Integer

impl<'i> DivRounding<i32> for &'i Integer
[src]

type Output = DivRoundingI32Incomplete<'i>

impl<'i> DivRounding<u32> for &'i Integer
[src]

type Output = DivRoundingU32Incomplete<'i>

impl<'i> DivRounding<Integer> for &'i Integer
[src]

type Output = Integer

impl<'t> DivRounding<&'t i32> for Integer
[src]

type Output = Integer

impl<'t> DivRounding<&'t u32> for Integer
[src]

type Output = Integer

impl<'t, 'i> DivRounding<&'t i32> for &'i Integer
[src]

type Output = DivRoundingI32Incomplete<'i>

impl<'t, 'i> DivRounding<&'t u32> for &'i Integer
[src]

type Output = DivRoundingU32Incomplete<'i>

Loading content...