Type Alias fraction::prelude::DynaFraction
source · pub type DynaFraction<T> = GenericFraction<DynaInt<T, BigUint>>;
Expand description
Stack allocated, but dynamically growing into heap if necessary
Fraction using T as the base type for numerator and denominator
Whenever possible keeps data in T, but on math overflows
automatically casts values into BigUint, which allocates memory on heap.
Allows to use fractions without memory allocations wherever possible. For unexpectedly big values performs on heap and doesn’t suffer from stack overflows. Automatically uses T if an operation on two BigUint numbers produces the result that may fit within T.
§Examples
use fraction::{DynaFraction, BigUint};
type D = DynaFraction<u32>;
let max_u32 = u32::max_value();
let one = D::from (1u32);
let mut val = D::from (max_u32);
assert_eq!( // check we still use u32 for the numerator
max_u32,
val.numer().unwrap().clone().unpack().ok().unwrap()
);
val += &one;
assert_eq!( // BigUint allocated for the result instead of stack overflow on u32
BigUint::from(max_u32) + BigUint::from(1u8),
val.numer().unwrap().clone().unpack().err().unwrap()
);
val -= one;
assert_eq!( // check we use u32 again
max_u32,
val.numer().unwrap().clone().unpack().ok().unwrap()
);
Aliased Type§
enum DynaFraction<T> {
Rational(Sign, Ratio<DynaInt<T, BigUint>>),
Infinity(Sign),
NaN,
}