Trait snarkvm_circuit::Rem

1.0.0 · source ·
pub trait Rem<Rhs = Self> {
    type Output;

    fn rem(self, rhs: Rhs) -> Self::Output;
}
Expand description

The remainder operator %.

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

Examples

This example implements Rem on a SplitSlice object. After Rem is implemented, one can use the % operator to find out what the remaining elements of the slice would be after splitting it into equal slices of a given length.

use std::ops::Rem;

#[derive(PartialEq, Debug)]
struct SplitSlice<'a, T: 'a> {
    slice: &'a [T],
}

impl<'a, T> Rem<usize> for SplitSlice<'a, T> {
    type Output = Self;

    fn rem(self, modulus: usize) -> Self::Output {
        let len = self.slice.len();
        let rem = len % modulus;
        let start = len - rem;
        Self {slice: &self.slice[start..]}
    }
}

// If we were to divide &[0, 1, 2, 3, 4, 5, 6, 7] into slices of size 3,
// the remainder would be &[6, 7].
assert_eq!(SplitSlice { slice: &[0, 1, 2, 3, 4, 5, 6, 7] } % 3,
           SplitSlice { slice: &[6, 7] });

Required Associated Types

The resulting type after applying the % operator.

Required Methods

Performs the % operation.

Example
assert_eq!(12 % 10, 2);

Trait Implementations

Returns the number of constants, public inputs, private inputs, and constraints.
Returns the mode of the output.

Implementors

The remainder from the division of two floats.

The remainder has the same sign as the dividend and is computed as: x - (x / y).trunc() * y.

Examples

let x: f32 = 50.50;
let y: f32 = 8.125;
let remainder = x - (x / y).trunc() * y;

// The answer to both operations is 1.75
assert_eq!(x % y, remainder);

The remainder from the division of two floats.

The remainder has the same sign as the dividend and is computed as: x - (x / y).trunc() * y.

Examples

let x: f32 = 50.50;
let y: f32 = 8.125;
let remainder = x - (x / y).trunc() * y;

// The answer to both operations is 1.75
assert_eq!(x % y, remainder);

This operation satisfies n % d == n - (n / d) * d. The result has the same sign as the left operand.

Panics

This operation will panic if other == 0 or if self / other results in overflow.

This operation satisfies n % d == n - (n / d) * d. The result has the same sign as the left operand.

Panics

This operation will panic if other == 0 or if self / other results in overflow.

This operation satisfies n % d == n - (n / d) * d. The result has the same sign as the left operand.

Panics

This operation will panic if other == 0 or if self / other results in overflow.

This operation satisfies n % d == n - (n / d) * d. The result has the same sign as the left operand.

Panics

This operation will panic if other == 0 or if self / other results in overflow.

This operation satisfies n % d == n - (n / d) * d. The result has the same sign as the left operand.

Panics

This operation will panic if other == 0 or if self / other results in overflow.

This operation satisfies n % d == n - (n / d) * d. The result has the same sign as the left operand.

Panics

This operation will panic if other == 0 or if self / other results in overflow.

This operation satisfies n % d == n - (n / d) * d. The result has the same sign as the left operand.

Panics

This operation will panic if other == 0.

This operation satisfies n % d == n - (n / d) * d. The result has the same sign as the left operand.

Panics

This operation will panic if other == 0.

This operation satisfies n % d == n - (n / d) * d. The result has the same sign as the left operand.

Panics

This operation will panic if other == 0.

This operation satisfies n % d == n - (n / d) * d. The result has the same sign as the left operand.

Panics

This operation will panic if other == 0.

This operation satisfies n % d == n - (n / d) * d. The result has the same sign as the left operand.

Panics

This operation will panic if other == 0.

This operation satisfies n % d == n - (n / d) * d. The result has the same sign as the left operand.

Panics

This operation will panic if other == 0.

Z0 % I = Z0 where I != 0

$A<Ul> % $B<Ur> = $R<Ul % Ur>

$A<Ul> % $B<Ur> = $R<Ul % Ur>

$A<Ul> % $B<Ur> = $R<Ul % Ur>

$A<Ul> % $B<Ur> = $R<Ul % Ur>