pub const WGSL: &str = concat!(
include_str!("../wgsl_byte_primitives/bytes.wgsl"),
"\n",
include_str!("wgsl/variance.wgsl"),
);
#[must_use]
pub fn variance(input: &[u8]) -> f32 {
if input.is_empty() {
return 0.0;
}
let mean = input.iter().map(|&byte| f64::from(byte)).sum::<f64>() / input.len() as f64;
let squared = input
.iter()
.map(|&byte| {
let delta = f64::from(byte) - mean;
delta * delta
})
.sum::<f64>();
(squared / input.len() as f64) as f32
}
#[must_use]
pub fn variance_bits(input: &[u8]) -> u32 {
variance(input).to_bits()
}