Trait FixedPointNumber

Source
pub trait FixedPointNumber:
    Sized
    + Copy
    + Default
    + Debug
    + Saturating
    + Bounded
    + Eq
    + PartialEq
    + Ord
    + PartialOrd
    + CheckedSub
    + CheckedAdd
    + CheckedMul
    + CheckedDiv
    + Add
    + Sub
    + Div
    + Mul
    + Zero
    + One {
    type Inner: Debug + One + CheckedMul + CheckedDiv + FixedPointOperand;

    const DIV: Self::Inner;
    const SIGNED: bool;
Show 22 methods // Required methods fn from_inner(int: Self::Inner) -> Self; fn into_inner(self) -> Self::Inner; // Provided methods fn accuracy() -> Self::Inner { ... } fn saturating_from_integer<N>(int: N) -> Self where N: FixedPointOperand { ... } fn checked_from_integer<N>(int: N) -> Option<Self> where N: Into<Self::Inner> { ... } fn saturating_from_rational<N, D>(n: N, d: D) -> Self where N: FixedPointOperand, D: FixedPointOperand { ... } fn checked_from_rational<N, D>(n: N, d: D) -> Option<Self> where N: FixedPointOperand, D: FixedPointOperand { ... } fn checked_mul_int<N>(self, n: N) -> Option<N> where N: FixedPointOperand { ... } fn saturating_mul_int<N>(self, n: N) -> N where N: FixedPointOperand { ... } fn checked_div_int<N>(self, d: N) -> Option<N> where N: FixedPointOperand { ... } fn saturating_div_int<N>(self, d: N) -> N where N: FixedPointOperand { ... } fn saturating_mul_acc_int<N>(self, n: N) -> N where N: FixedPointOperand { ... } fn saturating_abs(self) -> Self { ... } fn reciprocal(self) -> Option<Self> { ... } fn is_one(&self) -> bool { ... } fn is_positive(self) -> bool { ... } fn is_negative(self) -> bool { ... } fn trunc(self) -> Self { ... } fn frac(self) -> Self { ... } fn ceil(self) -> Self { ... } fn floor(self) -> Self { ... } fn round(self) -> Self { ... }
}
Expand description

Re-export top-level arithmetic stuff. Something that implements a decimal fixed point number.

The precision is given by Self::DIV, i.e. 1 / DIV can be represented.

Each type can store numbers from Self::Inner::min_value() / Self::DIV to Self::Inner::max_value() / Self::DIV. This is also referred to as the accuracy of the type in the documentation.

Required Associated Constants§

Source

const DIV: Self::Inner

Precision of this fixed point implementation. It should be a power of 10.

Source

const SIGNED: bool

Indicates if this fixed point implementation is signed or not.

Required Associated Types§

Source

type Inner: Debug + One + CheckedMul + CheckedDiv + FixedPointOperand

The underlying data type used for this fixed point number.

Required Methods§

Source

fn from_inner(int: Self::Inner) -> Self

Builds this type from an integer number.

Source

fn into_inner(self) -> Self::Inner

Consumes self and returns the inner raw value.

Provided Methods§

Source

fn accuracy() -> Self::Inner

Precision of this fixed point implementation.

Source

fn saturating_from_integer<N>(int: N) -> Self

Creates self from an integer number int.

Returns Self::max or Self::min if int exceeds accuracy.

Source

fn checked_from_integer<N>(int: N) -> Option<Self>
where N: Into<Self::Inner>,

Creates self from an integer number int.

Returns None if int exceeds accuracy.

Source

fn saturating_from_rational<N, D>(n: N, d: D) -> Self

Creates self from a rational number. Equal to n / d.

Panics if d = 0. Returns Self::max or Self::min if n / d exceeds accuracy.

Source

fn checked_from_rational<N, D>(n: N, d: D) -> Option<Self>

Creates self from a rational number. Equal to n / d.

Returns None if d == 0 or n / d exceeds accuracy.

Source

fn checked_mul_int<N>(self, n: N) -> Option<N>

Checked multiplication for integer type N. Equal to self * n.

Returns None if the result does not fit in N.

Source

fn saturating_mul_int<N>(self, n: N) -> N

Saturating multiplication for integer type N. Equal to self * n.

Returns N::min or N::max if the result does not fit in N.

Source

fn checked_div_int<N>(self, d: N) -> Option<N>

Checked division for integer type N. Equal to self / d.

Returns None if the result does not fit in N or d == 0.

Source

fn saturating_div_int<N>(self, d: N) -> N

Saturating division for integer type N. Equal to self / d.

Panics if d == 0. Returns N::min or N::max if the result does not fit in N.

Source

fn saturating_mul_acc_int<N>(self, n: N) -> N

Saturating multiplication for integer type N, adding the result back. Equal to self * n + n.

Returns N::min or N::max if the multiplication or final result does not fit in N.

Source

fn saturating_abs(self) -> Self

Saturating absolute value.

Returns Self::max if self == Self::min.

Source

fn reciprocal(self) -> Option<Self>

Takes the reciprocal (inverse). Equal to 1 / self.

Returns None if self = 0.

Source

fn is_one(&self) -> bool

Checks if the number is one.

Source

fn is_positive(self) -> bool

Returns true if self is positive and false if the number is zero or negative.

Source

fn is_negative(self) -> bool

Returns true if self is negative and false if the number is zero or positive.

Source

fn trunc(self) -> Self

Returns the integer part.

Source

fn frac(self) -> Self

Returns the fractional part.

Note: the returned fraction will be non-negative for negative numbers, except in the case where the integer part is zero.

Source

fn ceil(self) -> Self

Returns the smallest integer greater than or equal to a number.

Saturates to Self::max (truncated) if the result does not fit.

Source

fn floor(self) -> Self

Returns the largest integer less than or equal to a number.

Saturates to Self::min (truncated) if the result does not fit.

Source

fn round(self) -> Self

Returns the number rounded to the nearest integer. Rounds half-way cases away from 0.0.

Saturates to Self::min or Self::max (truncated) if the result does not fit.

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.

Implementors§

Source§

impl FixedPointNumber for FixedI64

Source§

const DIV: <FixedI64 as FixedPointNumber>::Inner = {transmute(0x000000003b9aca00): <sp_arithmetic::FixedI64 as sp_arithmetic::FixedPointNumber>::Inner}

Source§

const SIGNED: bool = true

Source§

type Inner = i64

Source§

impl FixedPointNumber for FixedI128

Source§

const DIV: <FixedI128 as FixedPointNumber>::Inner = {transmute(0x00000000000000000de0b6b3a7640000): <sp_arithmetic::FixedI128 as sp_arithmetic::FixedPointNumber>::Inner}

Source§

const SIGNED: bool = true

Source§

type Inner = i128

Source§

impl FixedPointNumber for FixedU64

Source§

const DIV: <FixedU64 as FixedPointNumber>::Inner = {transmute(0x000000003b9aca00): <sp_arithmetic::FixedU64 as sp_arithmetic::FixedPointNumber>::Inner}

Source§

const SIGNED: bool = false

Source§

type Inner = u64

Source§

impl FixedPointNumber for FixedU128

Source§

const DIV: <FixedU128 as FixedPointNumber>::Inner = {transmute(0x00000000000000000de0b6b3a7640000): <sp_arithmetic::FixedU128 as sp_arithmetic::FixedPointNumber>::Inner}

Source§

const SIGNED: bool = false

Source§

type Inner = u128