/// A collection-like object that is made of values of type `T` and can normalize its individual
/// This implementation is currently in a balanced position between being performant and accurate.
/// 1. We prefer storing original indices, and sorting the `input` only once. This will save the
/// 2. The granularity of increment/decrements is determined by the number of elements in `input`
/// When the sum is less than the target, the above approach always holds. In this case, then each
/// individual element is also less than target. Thus, by adding `per_round` to each item, neither
/// `leftover` value. This ensures that the result will always stay accurate, yet it might cause the
/// All in all, the complicated case above is rare to happen in most use cases within this repo ,
/// This function will return an error is if length of `input` cannot fit in `T`, or if `sum(input)`
let rational_2 = FixedU64::from_rational_with_rounding(5, 10, Rounding::Down); // "50%" aka 0.50...