Trait XXXSubYYYToZZZ

Source
pub trait XXXSubYYYToZZZ: Sized {
    // Required method
    fn xxx_sub_yyy_to_zzz(
        x_2: Self,
        x_1: Self,
        x_0: Self,
        y_2: Self,
        y_1: Self,
        y_0: Self,
    ) -> (Self, Self, Self);
}
Expand description

Subtracts two numbers, each composed of three Self values, returing the difference as a triple of Self values.

The more significant number always comes first. Subtraction is wrapping, and overflow is not indicated.

Required Methods§

Source

fn xxx_sub_yyy_to_zzz( x_2: Self, x_1: Self, x_0: Self, y_2: Self, y_1: Self, y_0: Self, ) -> (Self, Self, Self)

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl XXXSubYYYToZZZ for u8

Source§

fn xxx_sub_yyy_to_zzz( x_2: u8, x_1: u8, x_0: u8, y_2: u8, y_1: u8, y_0: u8, ) -> (u8, u8, u8)

Subtracts two numbers, each composed of three Self values, returning the difference as a triple of Self values.

The more significant value always comes first. Subtraction is wrapping, and overflow is not indicated.

$$ f(x_2, x_1, x_0, y_2, y_1, y_0) = (z_2, z_1, z_0), $$ where $W$ is Self::WIDTH,

$x_2, x_1, x_0, y_2, y_1, y_0, z_2, z_1, z_0 < 2^W$, and $$ (2^{2W}x_2 + 2^Wx_1 + x_0) - (2^{2W}y_2 + 2^Wy_1 + y_0) \equiv 2^{2W}z_2 + 2^Wz_1 + z_0 \mod 2^{3W}. $$

§Worst-case complexity

Constant time and additional memory.

§Examples

See here.

This is equivalent to sub_dddmmmsss from longlong.h, FLINT 2.7.1, where (dh, dm, dl) is returned.

Source§

impl XXXSubYYYToZZZ for u16

Source§

fn xxx_sub_yyy_to_zzz( x_2: u16, x_1: u16, x_0: u16, y_2: u16, y_1: u16, y_0: u16, ) -> (u16, u16, u16)

Subtracts two numbers, each composed of three Self values, returning the difference as a triple of Self values.

The more significant value always comes first. Subtraction is wrapping, and overflow is not indicated.

$$ f(x_2, x_1, x_0, y_2, y_1, y_0) = (z_2, z_1, z_0), $$ where $W$ is Self::WIDTH,

$x_2, x_1, x_0, y_2, y_1, y_0, z_2, z_1, z_0 < 2^W$, and $$ (2^{2W}x_2 + 2^Wx_1 + x_0) - (2^{2W}y_2 + 2^Wy_1 + y_0) \equiv 2^{2W}z_2 + 2^Wz_1 + z_0 \mod 2^{3W}. $$

§Worst-case complexity

Constant time and additional memory.

§Examples

See here.

This is equivalent to sub_dddmmmsss from longlong.h, FLINT 2.7.1, where (dh, dm, dl) is returned.

Source§

impl XXXSubYYYToZZZ for u32

Source§

fn xxx_sub_yyy_to_zzz( x_2: u32, x_1: u32, x_0: u32, y_2: u32, y_1: u32, y_0: u32, ) -> (u32, u32, u32)

Subtracts two numbers, each composed of three Self values, returning the difference as a triple of Self values.

The more significant value always comes first. Subtraction is wrapping, and overflow is not indicated.

$$ f(x_2, x_1, x_0, y_2, y_1, y_0) = (z_2, z_1, z_0), $$ where $W$ is Self::WIDTH,

$x_2, x_1, x_0, y_2, y_1, y_0, z_2, z_1, z_0 < 2^W$, and $$ (2^{2W}x_2 + 2^Wx_1 + x_0) - (2^{2W}y_2 + 2^Wy_1 + y_0) \equiv 2^{2W}z_2 + 2^Wz_1 + z_0 \mod 2^{3W}. $$

§Worst-case complexity

Constant time and additional memory.

§Examples

See here.

This is equivalent to sub_dddmmmsss from longlong.h, FLINT 2.7.1, where (dh, dm, dl) is returned.

Source§

impl XXXSubYYYToZZZ for u64

Source§

fn xxx_sub_yyy_to_zzz( x_2: u64, x_1: u64, x_0: u64, y_2: u64, y_1: u64, y_0: u64, ) -> (u64, u64, u64)

Subtracts two numbers, each composed of three Self values, returning the difference as a triple of Self values.

The more significant value always comes first. Subtraction is wrapping, and overflow is not indicated.

$$ f(x_2, x_1, x_0, y_2, y_1, y_0) = (z_2, z_1, z_0), $$ where $W$ is Self::WIDTH,

$x_2, x_1, x_0, y_2, y_1, y_0, z_2, z_1, z_0 < 2^W$, and $$ (2^{2W}x_2 + 2^Wx_1 + x_0) - (2^{2W}y_2 + 2^Wy_1 + y_0) \equiv 2^{2W}z_2 + 2^Wz_1 + z_0 \mod 2^{3W}. $$

§Worst-case complexity

Constant time and additional memory.

§Examples

See here.

This is equivalent to sub_dddmmmsss from longlong.h, FLINT 2.7.1, where (dh, dm, dl) is returned.

Source§

impl XXXSubYYYToZZZ for u128

Source§

fn xxx_sub_yyy_to_zzz( x_2: u128, x_1: u128, x_0: u128, y_2: u128, y_1: u128, y_0: u128, ) -> (u128, u128, u128)

Subtracts two numbers, each composed of three Self values, returning the difference as a triple of Self values.

The more significant value always comes first. Subtraction is wrapping, and overflow is not indicated.

$$ f(x_2, x_1, x_0, y_2, y_1, y_0) = (z_2, z_1, z_0), $$ where $W$ is Self::WIDTH,

$x_2, x_1, x_0, y_2, y_1, y_0, z_2, z_1, z_0 < 2^W$, and $$ (2^{2W}x_2 + 2^Wx_1 + x_0) - (2^{2W}y_2 + 2^Wy_1 + y_0) \equiv 2^{2W}z_2 + 2^Wz_1 + z_0 \mod 2^{3W}. $$

§Worst-case complexity

Constant time and additional memory.

§Examples

See here.

This is equivalent to sub_dddmmmsss from longlong.h, FLINT 2.7.1, where (dh, dm, dl) is returned.

Source§

impl XXXSubYYYToZZZ for usize

Source§

fn xxx_sub_yyy_to_zzz( x_2: usize, x_1: usize, x_0: usize, y_2: usize, y_1: usize, y_0: usize, ) -> (usize, usize, usize)

Subtracts two numbers, each composed of three usize values, returning the difference as a triple of usize values.

The more significant value always comes first. Subtraction is wrapping, and overflow is not indicated.

$$ f(x_2, x_1, x_0, y_2, y_1, y_0) = (z_2, z_1, z_0), $$ where $W$ is Self::WIDTH,

$x_2, x_1, x_0, y_2, y_1, y_0, z_2, z_1, z_0 < 2^W$, and $$ (2^{2W}x_2 + 2^Wx_1 + x_0) - (2^{2W}y_2 + 2^Wy_1 + y_0) \equiv 2^{2W}z_2 + 2^Wz_1 + z_0 \mod 2^{3W}. $$

§Worst-case complexity

Constant time and additional memory.

§Examples

See here.

This is equivalent to sub_dddmmmsss from longlong.h, FLINT 2.7.1, where (dh, dm, dl) is returned.

Implementors§