Struct ratio::Ratio

source ·
pub struct Ratio { /* private fields */ }
Expand description

The ratio type.

It converts numerator / denominator to mult / (1 << shift) to avoid u128 division on calculation. The shift is as large as possible to improve precision.

Currently, it only supports u32 as the numerator and denominator.

Implementations§

source§

impl Ratio

source

pub const fn zero() -> Self

The zero ratio.

source

pub const fn new(numerator: u32, denominator: u32) -> Self

Creates a new ratio numerator / denominator.

source

pub const fn inverse(&self) -> Self

Get the inverse ratio.

Examples
use ratio::Ratio;

let ratio = Ratio::new(1, 2);
assert_eq!(ratio.inverse(), Ratio::new(2, 1));
source

pub const fn mul_trunc(&self, value: u64) -> u64

Multiplies the ratio by a value and rounds the result down.

Examples
use ratio::Ratio;

let ratio = Ratio::new(2, 3);
assert_eq!(ratio.mul_trunc(99), 66);  // 99 * 2 / 3 = 66
assert_eq!(ratio.mul_trunc(100), 66); // trunc(100 * 2 / 3) = trunc(66.66...) = 66
source

pub const fn mul_round(&self, value: u64) -> u64

Multiplies the ratio by a value and rounds the result to the nearest whole number.

Examples
use ratio::Ratio;

let ratio = Ratio::new(2, 3);
assert_eq!(ratio.mul_round(99), 66);  // 99 * 2 / 3 = 66
assert_eq!(ratio.mul_round(100), 67); // round(100 * 2 / 3) = round(66.66...) = 67

Trait Implementations§

source§

impl Debug for Ratio

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq for Ratio

source§

fn eq(&self, other: &Ratio) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.

Auto Trait Implementations§

§

impl RefUnwindSafe for Ratio

§

impl Send for Ratio

§

impl Sync for Ratio

§

impl Unpin for Ratio

§

impl UnwindSafe for Ratio

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.