Trait XXXAddYYYToZZZ

Source
pub trait XXXAddYYYToZZZ: Sized {
    // Required method
    fn xxx_add_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

Adds two numbers, each composed of three Self values, returning the sum as a triple of Self values.

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

Required Methods§

Source

fn xxx_add_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 XXXAddYYYToZZZ for u8

Source§

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

Adds two numbers, each composed of three Self values, returning the sum as a triple of Self values.

The more significant value always comes first. Addition 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 add_sssaaaaaa from longlong.h, FLINT 2.7.1, where (sh, sm, sl) is returned.

Source§

impl XXXAddYYYToZZZ for u16

Source§

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

Adds two numbers, each composed of three Self values, returning the sum as a triple of Self values.

The more significant value always comes first. Addition 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 add_sssaaaaaa from longlong.h, FLINT 2.7.1, where (sh, sm, sl) is returned.

Source§

impl XXXAddYYYToZZZ for u32

Source§

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

Adds two numbers, each composed of three Self values, returning the sum as a triple of Self values.

The more significant value always comes first. Addition 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 add_sssaaaaaa from longlong.h, FLINT 2.7.1, where (sh, sm, sl) is returned.

Source§

impl XXXAddYYYToZZZ for u64

Source§

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

Adds two numbers, each composed of three Self values, returning the sum as a triple of Self values.

The more significant value always comes first. Addition 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 add_sssaaaaaa from longlong.h, FLINT 2.7.1, where (sh, sm, sl) is returned.

Source§

impl XXXAddYYYToZZZ for u128

Source§

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

Adds two numbers, each composed of three Self values, returning the sum as a triple of Self values.

The more significant value always comes first. Addition 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 add_sssaaaaaa from longlong.h, FLINT 2.7.1, where (sh, sm, sl) is returned.

Source§

impl XXXAddYYYToZZZ for usize

Source§

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

Adds two numbers, each composed of three usize values, returning the sum as a triple of usize values.

The more significant value always comes first. Addition 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 add_sssaaaaaa from longlong.h, FLINT 2.7.1, where (sh, sm, sl) is returned.

Implementors§