#![doc = include_str!("../README.md")]
#![warn(missing_docs)]
#![warn(clippy::all)]
#![warn(clippy::missing_docs_in_private_items)]
use ::num::{checked_pow, CheckedMul, Integer, Unsigned};
pub use ::num::rational::Ratio;
pub use sht::{ChannelRatios, ColourChannel, SecondaryColour, SHT};
pub mod rgb;
pub mod sht;
#[cfg(test)]
mod lib_tests;
fn round_denominator<T>(
ratio_on_unit_interval: Ratio<T>,
base: T,
exponent: usize,
negative_offset: T,
) -> Ratio<T>
where
T: Integer + Unsigned + CheckedMul + Clone + From<u8>,
{
let half = Ratio::new(1.into(), 2.into());
let new_denominator =
checked_pow(base, exponent).expect("Overflow calculating denominator") - negative_offset;
((ratio_on_unit_interval * new_denominator.clone() + half).trunc()) / new_denominator
}