pub trait XXSubYYToZZ: Sized {
// Required method
fn xx_sub_yy_to_zz(
x_1: Self,
x_0: Self,
y_1: Self,
y_0: Self,
) -> (Self, Self);
}
Expand description
Subtracts two numbers, each composed of two Self
values, returing the difference as a pair of
Self
values.
The more significant number always comes first. Subtraction is wrapping, and overflow is not indicated.
Required Methods§
fn xx_sub_yy_to_zz(x_1: Self, x_0: Self, y_1: Self, y_0: 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 XXSubYYToZZ for u8
impl XXSubYYToZZ for u8
Source§fn xx_sub_yy_to_zz(x_1: u8, x_0: u8, y_1: u8, y_0: u8) -> (u8, u8)
fn xx_sub_yy_to_zz(x_1: u8, x_0: u8, y_1: u8, y_0: u8) -> (u8, u8)
Subtracts two numbers, each composed of two Self
values, returning the difference
as a pair of Self
values.
The more significant value always comes first. Subtraction is wrapping, and overflow is not indicated.
$$
f(x_1, x_0, y_1, y_0) = (z_1, z_0),
$$
where $W$ is Self::WIDTH
,
$x_1, x_0, y_1, y_0, z_1, z_0 < 2^W$, and $$ (2^Wx_1 + x_0) - (2^Wy_1 + y_0) \equiv 2^Wz_1 + z_0 \mod 2^{2W}. $$
§Worst-case complexity
Constant time and additional memory.
§Examples
See here.
This is equivalent to sub_ddmmss
from longlong.h
, GMP 6.2.1, where (sh, sl)
is
returned.
Source§impl XXSubYYToZZ for u16
impl XXSubYYToZZ for u16
Source§fn xx_sub_yy_to_zz(x_1: u16, x_0: u16, y_1: u16, y_0: u16) -> (u16, u16)
fn xx_sub_yy_to_zz(x_1: u16, x_0: u16, y_1: u16, y_0: u16) -> (u16, u16)
Subtracts two numbers, each composed of two Self
values, returning the difference
as a pair of Self
values.
The more significant value always comes first. Subtraction is wrapping, and overflow is not indicated.
$$
f(x_1, x_0, y_1, y_0) = (z_1, z_0),
$$
where $W$ is Self::WIDTH
,
$x_1, x_0, y_1, y_0, z_1, z_0 < 2^W$, and $$ (2^Wx_1 + x_0) - (2^Wy_1 + y_0) \equiv 2^Wz_1 + z_0 \mod 2^{2W}. $$
§Worst-case complexity
Constant time and additional memory.
§Examples
See here.
This is equivalent to sub_ddmmss
from longlong.h
, GMP 6.2.1, where (sh, sl)
is
returned.
Source§impl XXSubYYToZZ for u32
impl XXSubYYToZZ for u32
Source§fn xx_sub_yy_to_zz(x_1: u32, x_0: u32, y_1: u32, y_0: u32) -> (u32, u32)
fn xx_sub_yy_to_zz(x_1: u32, x_0: u32, y_1: u32, y_0: u32) -> (u32, u32)
Subtracts two numbers, each composed of two Self
values, returning the difference
as a pair of Self
values.
The more significant value always comes first. Subtraction is wrapping, and overflow is not indicated.
$$
f(x_1, x_0, y_1, y_0) = (z_1, z_0),
$$
where $W$ is Self::WIDTH
,
$x_1, x_0, y_1, y_0, z_1, z_0 < 2^W$, and $$ (2^Wx_1 + x_0) - (2^Wy_1 + y_0) \equiv 2^Wz_1 + z_0 \mod 2^{2W}. $$
§Worst-case complexity
Constant time and additional memory.
§Examples
See here.
This is equivalent to sub_ddmmss
from longlong.h
, GMP 6.2.1, where (sh, sl)
is
returned.
Source§impl XXSubYYToZZ for u64
impl XXSubYYToZZ for u64
Source§fn xx_sub_yy_to_zz(x_1: u64, x_0: u64, y_1: u64, y_0: u64) -> (u64, u64)
fn xx_sub_yy_to_zz(x_1: u64, x_0: u64, y_1: u64, y_0: u64) -> (u64, u64)
Subtracts two numbers, each composed of two Self
values, returning the difference
as a pair of Self
values.
The more significant value always comes first. Subtraction is wrapping, and overflow is not indicated.
$$
f(x_1, x_0, y_1, y_0) = (z_1, z_0),
$$
where $W$ is Self::WIDTH
,
$x_1, x_0, y_1, y_0, z_1, z_0 < 2^W$, and $$ (2^Wx_1 + x_0) - (2^Wy_1 + y_0) \equiv 2^Wz_1 + z_0 \mod 2^{2W}. $$
§Worst-case complexity
Constant time and additional memory.
§Examples
See here.
This is equivalent to sub_ddmmss
from longlong.h
, GMP 6.2.1, where (sh, sl)
is
returned.
Source§impl XXSubYYToZZ for u128
impl XXSubYYToZZ for u128
Source§fn xx_sub_yy_to_zz(x_1: u128, x_0: u128, y_1: u128, y_0: u128) -> (u128, u128)
fn xx_sub_yy_to_zz(x_1: u128, x_0: u128, y_1: u128, y_0: u128) -> (u128, u128)
Subtracts two numbers, each composed of two u128
values, returning the difference as a
pair of u128
values.
The more significant value always comes first. Subtraction is wrapping, and overflow is not indicated.
$$
f(x_1, x_0, y_1, y_0) = (z_1, z_0),
$$
where $W$ is Self::WIDTH
,
$x_1, x_0, y_1, y_0, z_1, z_0 < 2^W$, and $$ (2^Wx_1 + x_0) - (2^Wy_1 + y_0) \equiv 2^Wz_1 + z_0 \mod 2^{2W}. $$
§Examples
See here.
§Worst-case complexity
Constant time and additional memory.
This is equivalent to sub_ddmmss
from longlong.h
, GMP 6.2.1, where (sh, sl)
is
returned.
Source§impl XXSubYYToZZ for usize
impl XXSubYYToZZ for usize
Source§fn xx_sub_yy_to_zz(
x_1: usize,
x_0: usize,
y_1: usize,
y_0: usize,
) -> (usize, usize)
fn xx_sub_yy_to_zz( x_1: usize, x_0: usize, y_1: usize, y_0: usize, ) -> (usize, usize)
Subtracts two numbers, each composed of two usize
values, returning the difference as a
pair of usize
values.
The more significant value always comes first. Subtraction is wrapping, and overflow is not indicated.
$$
f(x_1, x_0, y_1, y_0) = (z_1, z_0),
$$
where $W$ is Self::WIDTH
,
$x_1, x_0, y_1, y_0, z_1, z_0 < 2^W$, and $$ (2^Wx_1 + x_0) - (2^Wy_1 + y_0) \equiv 2^Wz_1 + z_0 \mod 2^{2W}. $$
§Worst-case complexity
Constant time and additional memory.
§Examples
See here.
This is equivalent to sub_ddmmss
from longlong.h
, GMP 6.2.1, where (sh, sl)
is
returned.