Trait malachite_base::num::arithmetic::traits::XXSubYYToZZ
source · [−]pub trait XXSubYYToZZ: Sized {
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)
Implementations on Foreign Types
sourceimpl XXSubYYToZZ for u8
impl XXSubYYToZZ for u8
sourcefn 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.
sourceimpl XXSubYYToZZ for u16
impl XXSubYYToZZ for u16
sourcefn 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.
sourceimpl XXSubYYToZZ for u32
impl XXSubYYToZZ for u32
sourcefn 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.
sourceimpl XXSubYYToZZ for u64
impl XXSubYYToZZ for u64
sourcefn 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.
sourceimpl XXSubYYToZZ for usize
impl XXSubYYToZZ for usize
sourcefn 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.
sourceimpl XXSubYYToZZ for u128
impl XXSubYYToZZ for u128
sourcefn 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.