Struct sp_arithmetic::per_things::PerU16
source · pub struct PerU16(_);
Expand description
A fixed point representation of a number in the range [0, 1].
Parts per 65535
Implementations
sourceimpl PerU16
impl PerU16
sourcepub const fn from_parts(parts: u16) -> Self
pub const fn from_parts(parts: u16) -> Self
From an explicitly defined number of parts per maximum of the type.
sourcepub const fn from_percent(x: u16) -> Self
pub const fn from_percent(x: u16) -> Self
Converts a percent into Self
. Equal to x / 100
.
This can be created at compile time.
sourcepub const fn one() -> Self
pub const fn one() -> Self
See PerThing::one
sourcepub fn is_one(&self) -> bool
pub fn is_one(&self) -> bool
See PerThing::is_one
.
sourcepub const fn zero() -> Self
pub const fn zero() -> Self
See PerThing::zero
.
sourcepub fn is_zero(&self) -> bool
pub fn is_zero(&self) -> bool
See PerThing::is_zero
.
sourcepub const fn deconstruct(self) -> u16
pub const fn deconstruct(self) -> u16
sourcepub fn square(self) -> Self
pub fn square(self) -> Self
See PerThing::square
.
sourcepub fn from_float(x: f64) -> Self
pub fn from_float(x: f64) -> Self
See PerThing::from_float
.
sourcepub fn from_rational_approximation<N>(p: N, q: N) -> Selfwhere
N: RationalArg + TryInto<u16> + TryInto<u32>,
u16: Into<N>,
👎Deprecated: Use PerThing::from_rational
instead
pub fn from_rational_approximation<N>(p: N, q: N) -> Selfwhere
N: RationalArg + TryInto<u16> + TryInto<u32>,
u16: Into<N>,
PerThing::from_rational
insteadsourcepub fn from_rational<N>(p: N, q: N) -> Selfwhere
N: RationalArg + TryInto<u16> + TryInto<u32>,
u16: Into<N>,
pub fn from_rational<N>(p: N, q: N) -> Selfwhere
N: RationalArg + TryInto<u16> + TryInto<u32>,
u16: Into<N>,
sourcepub fn int_mul(self, b: u16) -> Self
pub fn int_mul(self, b: u16) -> Self
Integer multiplication with another value, saturating at 1.
sourcepub fn mul_floor<N>(self, b: N) -> Nwhere
N: MultiplyArg + UniqueSaturatedInto<u16>,
u16: Into<N>,
pub fn mul_floor<N>(self, b: N) -> Nwhere
N: MultiplyArg + UniqueSaturatedInto<u16>,
u16: Into<N>,
See PerThing::mul_floor
.
sourcepub fn mul_ceil<N>(self, b: N) -> Nwhere
N: MultiplyArg + UniqueSaturatedInto<u16>,
u16: Into<N>,
pub fn mul_ceil<N>(self, b: N) -> Nwhere
N: MultiplyArg + UniqueSaturatedInto<u16>,
u16: Into<N>,
See PerThing::mul_ceil
.
sourcepub fn saturating_reciprocal_mul<N>(self, b: N) -> Nwhere
N: ReciprocalArg + UniqueSaturatedInto<u16>,
u16: Into<N>,
pub fn saturating_reciprocal_mul<N>(self, b: N) -> Nwhere
N: ReciprocalArg + UniqueSaturatedInto<u16>,
u16: Into<N>,
sourcepub fn saturating_reciprocal_mul_floor<N>(self, b: N) -> Nwhere
N: ReciprocalArg + UniqueSaturatedInto<u16>,
u16: Into<N>,
pub fn saturating_reciprocal_mul_floor<N>(self, b: N) -> Nwhere
N: ReciprocalArg + UniqueSaturatedInto<u16>,
u16: Into<N>,
sourcepub fn saturating_reciprocal_mul_ceil<N>(self, b: N) -> Nwhere
N: ReciprocalArg + UniqueSaturatedInto<u16>,
u16: Into<N>,
pub fn saturating_reciprocal_mul_ceil<N>(self, b: N) -> Nwhere
N: ReciprocalArg + UniqueSaturatedInto<u16>,
u16: Into<N>,
sourcepub fn saturating_div(self, rhs: Self, r: Rounding) -> Self
pub fn saturating_div(self, rhs: Self, r: Rounding) -> Self
Saturating division. Compute self / rhs
, saturating at one if rhs < self
.
The rounding
method must be specified. e.g.:
let pc = |x| Percent::from_percent(x);
assert_eq!(
pc(2).saturating_div(pc(3), Down),
pc(66),
);
assert_eq!(
pc(1).saturating_div(pc(3), NearestPrefUp),
pc(33),
);
assert_eq!(
pc(2).saturating_div(pc(3), NearestPrefDown),
pc(67),
);
assert_eq!(
pc(1).saturating_div(pc(3), Up),
pc(34),
);
sourceimpl PerU16
impl PerU16
sourcepub const fn from_perthousand(x: u16) -> Self
pub const fn from_perthousand(x: u16) -> Self
Converts a percent into Self
. Equal to x / 1000
.
This can be created at compile time.
Trait Implementations
sourceimpl CheckedAdd for PerU16
impl CheckedAdd for PerU16
sourcefn checked_add(&self, rhs: &Self) -> Option<Self>
fn checked_add(&self, rhs: &Self) -> Option<Self>
None
is
returned. Read moresourceimpl CheckedMul for PerU16
impl CheckedMul for PerU16
Note
CheckedMul will never fail for PerThings.
sourcefn checked_mul(&self, rhs: &Self) -> Option<Self>
fn checked_mul(&self, rhs: &Self) -> Option<Self>
None
is returned. Read moresourceimpl CheckedSub for PerU16
impl CheckedSub for PerU16
sourcefn checked_sub(&self, v: &Self) -> Option<Self>
fn checked_sub(&self, v: &Self) -> Option<Self>
None
is returned. Read moresourceimpl CompactAs for PerU16
impl CompactAs for PerU16
Implementation makes any compact encoding of PerThing::Inner
valid,
when decoding it will saturate up to PerThing::ACCURACY
.
sourceimpl Decode for PerU16
impl Decode for PerU16
sourcefn decode<I: Input>(input: &mut I) -> Result<Self, Error>
fn decode<I: Input>(input: &mut I) -> Result<Self, Error>
fn skip<I>(input: &mut I) -> Result<(), Error>where
I: Input,
fn skip<I>(input: &mut I) -> Result<(), Error>where
I: Input,
fn encoded_fixed_size() -> Option<usize>
fn encoded_fixed_size() -> Option<usize>
sourceimpl<'de> Deserialize<'de> for PerU16
impl<'de> Deserialize<'de> for PerU16
sourcefn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
sourceimpl Encode for PerU16
impl Encode for PerU16
sourcefn encode_to<__CodecOutputEdqy: Output + ?Sized>(
&self,
__codec_dest_edqy: &mut __CodecOutputEdqy
)
fn encode_to<__CodecOutputEdqy: Output + ?Sized>(
&self,
__codec_dest_edqy: &mut __CodecOutputEdqy
)
sourcefn using_encoded<R, F: FnOnce(&[u8]) -> R>(&self, f: F) -> R
fn using_encoded<R, F: FnOnce(&[u8]) -> R>(&self, f: F) -> R
fn encoded_size(&self) -> usize
fn encoded_size(&self) -> usize
sourceimpl MaxEncodedLen for PerU16
impl MaxEncodedLen for PerU16
sourcefn max_encoded_len() -> usize
fn max_encoded_len() -> usize
sourceimpl<N> Mul<N> for PerU16where
N: Clone + UniqueSaturatedInto<u16> + Rem<N, Output = N> + Div<N, Output = N> + Mul<N, Output = N> + Add<N, Output = N> + Unsigned,
u16: Into<N>,
impl<N> Mul<N> for PerU16where
N: Clone + UniqueSaturatedInto<u16> + Rem<N, Output = N> + Div<N, Output = N> + Mul<N, Output = N> + Add<N, Output = N> + Unsigned,
u16: Into<N>,
Non-overflow multiplication.
This is tailored to be used with a balance type.
sourceimpl Ord for PerU16
impl Ord for PerU16
1.21.0 · sourcefn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
1.21.0 · sourcefn min(self, other: Self) -> Selfwhere
Self: Sized,
fn min(self, other: Self) -> Selfwhere
Self: Sized,
1.50.0 · sourcefn clamp(self, min: Self, max: Self) -> Selfwhere
Self: Sized + PartialOrd<Self>,
fn clamp(self, min: Self, max: Self) -> Selfwhere
Self: Sized + PartialOrd<Self>,
sourceimpl PartialOrd<PerU16> for PerU16
impl PartialOrd<PerU16> for PerU16
sourcefn partial_cmp(&self, other: &PerU16) -> Option<Ordering>
fn partial_cmp(&self, other: &PerU16) -> Option<Ordering>
1.0.0 · sourcefn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self
and other
) and is used by the <=
operator. Read moresourceimpl PerThing for PerU16
impl PerThing for PerU16
sourcefn deconstruct(self) -> Self::Inner
fn deconstruct(self) -> Self::Inner
Consume self and return the number of parts per thing.
sourcefn from_parts(parts: Self::Inner) -> Self
fn from_parts(parts: Self::Inner) -> Self
Build this type from a number of parts per thing.
sourcefn from_float(x: f64) -> Self
fn from_float(x: f64) -> Self
NOTE: saturate to 0 or 1 if x is beyond [0, 1]
type Upper = u32
type Upper = u32
Self::Inner
, used to avoid overflow in some computations.
It must be able to compute ACCURACY^2
. Read moresourceconst ACCURACY: Self::Inner = {transmute(0xffff): <per_things::PerU16 as per_things::PerThing>::Inner}
const ACCURACY: Self::Inner = {transmute(0xffff): <per_things::PerU16 as per_things::PerThing>::Inner}
sourcefn from_rational_with_rounding<N>(p: N, q: N, r: Rounding) -> Result<Self, ()>where
N: Clone + Ord + TryInto<Self::Inner> + TryInto<Self::Upper> + Div<N, Output = N> + Rem<N, Output = N> + Add<N, Output = N> + AddAssign<N> + Unsigned + Zero + One,
Self::Inner: Into<N>,
fn from_rational_with_rounding<N>(p: N, q: N, r: Rounding) -> Result<Self, ()>where
N: Clone + Ord + TryInto<Self::Inner> + TryInto<Self::Upper> + Div<N, Output = N> + Rem<N, Output = N> + Add<N, Output = N> + AddAssign<N> + Unsigned + Zero + One,
Self::Inner: Into<N>,
p/q
into a per-thing fraction. Read moresourcefn less_epsilon(self) -> Self
fn less_epsilon(self) -> Self
self
or self
if it is already zero.sourcefn try_less_epsilon(self) -> Result<Self, Self>
fn try_less_epsilon(self) -> Result<Self, Self>
self
or an error with the same value if self
is already
zero. Read moresourcefn plus_epsilon(self) -> Self
fn plus_epsilon(self) -> Self
self
or self
if it is already one.sourcefn try_plus_epsilon(self) -> Result<Self, Self>
fn try_plus_epsilon(self) -> Result<Self, Self>
self
or an error with the same value if self
is already
one. Read moresourcefn from_percent(x: Self::Inner) -> Self
fn from_percent(x: Self::Inner) -> Self
Self::from_parts(x * Self::ACCURACY / 100)
but more accurate and can cope with potential type overflows. Read moresourcefn left_from_one(self) -> Self
fn left_from_one(self) -> Self
self
is saturating-subtracted from Self::one()
.sourcefn mul_floor<N>(self, b: N) -> Nwhere
N: MultiplyArg + UniqueSaturatedInto<Self::Inner>,
Self::Inner: Into<N>,
fn mul_floor<N>(self, b: N) -> Nwhere
N: MultiplyArg + UniqueSaturatedInto<Self::Inner>,
Self::Inner: Into<N>,
Mul
rounds to the
nearest whole number. Read moresourcefn mul_ceil<N>(self, b: N) -> Nwhere
N: MultiplyArg + UniqueSaturatedInto<Self::Inner>,
Self::Inner: Into<N>,
fn mul_ceil<N>(self, b: N) -> Nwhere
N: MultiplyArg + UniqueSaturatedInto<Self::Inner>,
Self::Inner: Into<N>,
Mul
rounds to the nearest whole number. Read moresourcefn saturating_reciprocal_mul<N>(self, b: N) -> Nwhere
N: ReciprocalArg + UniqueSaturatedInto<Self::Inner>,
Self::Inner: Into<N>,
fn saturating_reciprocal_mul<N>(self, b: N) -> Nwhere
N: ReciprocalArg + UniqueSaturatedInto<Self::Inner>,
Self::Inner: Into<N>,
self
. The result is rounded to the
nearest whole number and saturates at the numeric bounds instead of overflowing. Read moresourcefn saturating_reciprocal_mul_floor<N>(self, b: N) -> Nwhere
N: ReciprocalArg + UniqueSaturatedInto<Self::Inner>,
Self::Inner: Into<N>,
fn saturating_reciprocal_mul_floor<N>(self, b: N) -> Nwhere
N: ReciprocalArg + UniqueSaturatedInto<Self::Inner>,
Self::Inner: Into<N>,
self
. The result is rounded down to the
nearest whole number and saturates at the numeric bounds instead of overflowing. Read moresourcefn saturating_reciprocal_mul_ceil<N>(self, b: N) -> Nwhere
N: ReciprocalArg + UniqueSaturatedInto<Self::Inner>,
Self::Inner: Into<N>,
fn saturating_reciprocal_mul_ceil<N>(self, b: N) -> Nwhere
N: ReciprocalArg + UniqueSaturatedInto<Self::Inner>,
Self::Inner: Into<N>,
self
. The result is rounded up to the
nearest whole number and saturates at the numeric bounds instead of overflowing. Read moresourcefn from_rational<N>(p: N, q: N) -> Selfwhere
N: RationalArg + TryInto<Self::Inner> + TryInto<Self::Upper>,
Self::Inner: Into<N>,
fn from_rational<N>(p: N, q: N) -> Selfwhere
N: RationalArg + TryInto<Self::Inner> + TryInto<Self::Upper>,
Self::Inner: Into<N>,
p/q
into a per-thing fraction. This will never overflow. Read moresourcefn from_rational_approximation<N>(p: N, q: N) -> Selfwhere
N: RationalArg + TryInto<Self::Inner> + TryInto<Self::Upper>,
Self::Inner: Into<N>,
fn from_rational_approximation<N>(p: N, q: N) -> Selfwhere
N: RationalArg + TryInto<Self::Inner> + TryInto<Self::Upper>,
Self::Inner: Into<N>,
Self::from_rational
.sourceimpl Saturating for PerU16
impl Saturating for PerU16
sourcefn saturating_add(self, rhs: Self) -> Self
fn saturating_add(self, rhs: Self) -> Self
Saturating addition. Compute self + rhs
, saturating at the numeric bounds instead of
overflowing. This operation is lossless if it does not saturate.
sourcefn saturating_sub(self, rhs: Self) -> Self
fn saturating_sub(self, rhs: Self) -> Self
Saturating subtraction. Compute self - rhs
, saturating at the numeric bounds instead of
overflowing. This operation is lossless if it does not saturate.
sourcefn saturating_mul(self, rhs: Self) -> Self
fn saturating_mul(self, rhs: Self) -> Self
Saturating multiply. Compute self * rhs
, saturating at the numeric bounds instead of
overflowing. This operation is lossy.
sourcefn saturating_pow(self, exp: usize) -> Self
fn saturating_pow(self, exp: usize) -> Self
Saturating exponentiation. Computes self.pow(exp)
, saturating at the numeric
bounds instead of overflowing. This operation is lossy.
sourcefn saturating_inc(&mut self)where
Self: One,
fn saturating_inc(&mut self)where
Self: One,
sourcefn saturating_dec(&mut self)where
Self: One,
fn saturating_dec(&mut self)where
Self: One,
sourcefn saturating_accrue(&mut self, amount: Self)where
Self: One,
fn saturating_accrue(&mut self, amount: Self)where
Self: One,
amount
, saturating.sourcefn saturating_reduce(&mut self, amount: Self)where
Self: One,
fn saturating_reduce(&mut self, amount: Self)where
Self: One,
amount
, saturating at zero.sourceimpl SaturatingAdd for PerU16
impl SaturatingAdd for PerU16
sourcefn saturating_add(&self, v: &Self) -> Self
fn saturating_add(&self, v: &Self) -> Self
self + other
, saturating at the relevant high or low boundary of
the type. Read moresourceimpl SaturatingSub for PerU16
impl SaturatingSub for PerU16
sourcefn saturating_sub(&self, v: &Self) -> Self
fn saturating_sub(&self, v: &Self) -> Self
self - other
, saturating at the relevant high or low boundary of
the type. Read moreimpl Copy for PerU16
impl EncodeLike<PerU16> for PerU16
impl Eq for PerU16
impl StructuralEq for PerU16
impl StructuralPartialEq for PerU16
Auto Trait Implementations
impl RefUnwindSafe for PerU16
impl Send for PerU16
impl Sync for PerU16
impl Unpin for PerU16
impl UnwindSafe for PerU16
Blanket Implementations
sourceimpl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<T> DecodeAll for Twhere
T: Decode,
impl<T> DecodeAll for Twhere
T: Decode,
fn decode_all(input: &mut &[u8]) -> Result<T, Error>
fn decode_all(input: &mut &[u8]) -> Result<T, Error>
Self
and consume all of the given input data. Read moreimpl<T> DecodeLimit for Twhere
T: Decode,
impl<T> DecodeLimit for Twhere
T: Decode,
fn decode_all_with_depth_limit(limit: u32, input: &mut &[u8]) -> Result<T, Error>
fn decode_all_with_depth_limit(limit: u32, input: &mut &[u8]) -> Result<T, Error>
Self
and consume all of the given input data. Read morefn decode_with_depth_limit<I>(limit: u32, input: &mut I) -> Result<T, Error>where
I: Input,
fn decode_with_depth_limit<I>(limit: u32, input: &mut I) -> Result<T, Error>where
I: Input,
Self
with the given maximum recursion depth and advance input
by the number of
bytes consumed. Read moreimpl<T> HasCompact for Twhere
T: 'static,
Compact<T>: for<'a> EncodeAsRef<'a, T> + Decode + From<T> + Into<T>,
impl<T> HasCompact for Twhere
T: 'static,
Compact<T>: for<'a> EncodeAsRef<'a, T> + Decode + From<T> + Into<T>,
type Type = Compact<T>
type Type = Compact<T>
impl<T> KeyedVec for Twhere
T: Codec,
impl<T> KeyedVec for Twhere
T: Codec,
fn to_keyed_vec(&self, prepend_key: &[u8]) -> Vec<u8, Global>
fn to_keyed_vec(&self, prepend_key: &[u8]) -> Vec<u8, Global>
Self
prepended by given slice.sourceimpl<T> LowerBounded for Twhere
T: Bounded,
impl<T> LowerBounded for Twhere
T: Bounded,
sourceimpl<T> SaturatedConversion for T
impl<T> SaturatedConversion for T
sourcefn saturated_from<T>(t: T) -> Selfwhere
Self: UniqueSaturatedFrom<T>,
fn saturated_from<T>(t: T) -> Selfwhere
Self: UniqueSaturatedFrom<T>,
sourcefn saturated_into<T>(self) -> Twhere
Self: UniqueSaturatedInto<T>,
fn saturated_into<T>(self) -> Twhere
Self: UniqueSaturatedInto<T>,
T
. Read moresourceimpl<T> ThresholdOrd<T> for Twhere
T: Ord + PartialOrd<T> + Copy + Clone + Zero + Saturating,
impl<T> ThresholdOrd<T> for Twhere
T: Ord + PartialOrd<T> + Copy + Clone + Zero + Saturating,
sourceimpl<T, S> UniqueSaturatedFrom<T> for Swhere
S: TryFrom<T> + Bounded,
impl<T, S> UniqueSaturatedFrom<T> for Swhere
S: TryFrom<T> + Bounded,
sourcefn unique_saturated_from(t: T) -> S
fn unique_saturated_from(t: T) -> S
T
into an equivalent instance of Self
.sourceimpl<T, S> UniqueSaturatedInto<T> for Swhere
T: Bounded,
S: TryInto<T>,
impl<T, S> UniqueSaturatedInto<T> for Swhere
T: Bounded,
S: TryInto<T>,
sourcefn unique_saturated_into(self) -> T
fn unique_saturated_into(self) -> T
T
.