Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- use std::ops::Add;
- use std::ops::Div;
- use num::{Zero, cast::AsPrimitive};
- fn mean_impl<T, O, It, OUTPUT>(it: It) -> OUTPUT // OUTPUT::Output
- where
- It: IntoIterator<Item = T>,
- T: Add<Output = O>,
- O: AsPrimitive<OUTPUT> + Zero + Add<T, Output = O>,
- OUTPUT: Copy + 'static + Div<Output = OUTPUT>,
- usize: AsPrimitive<OUTPUT>,
- {
- let (count, total) = it
- .into_iter()
- .fold((0_usize, O::zero()), |(count, total), x| (count + 1, total + x));
- total.as_() / count.as_()
- }
- fn mean<T, O, It>(it: It) -> f64
- where
- It: IntoIterator<Item = T>,
- T: Add<Output = O>,
- O: AsPrimitive<f64> + Zero + Add<T, Output = O>,
- {
- mean_impl(it)
- }
- fn main() {
- dbg!(mean(&[1_i8,2,3,4,5,6]));
- dbg!(mean(&[1_u8,2,3,4,5,6]));
- dbg!(mean(&[1_i16,2,3,4,5,6]));
- dbg!(mean(&[1_u16,2,3,4,5,6]));
- dbg!(mean(&[1_i32,2,3,4,5,6]));
- dbg!(mean(&[1_u32,2,3,4,5,6]));
- dbg!(mean(&[1_i64,2,3,4,5,6]));
- dbg!(mean(&[1_u64,2,3,4,5,6]));
- dbg!(mean(&[1_f32,2.,3.,4.,5.,6.]));
- dbg!(mean(&[1_f64,2.,3.,4.,5.,6.]));
- dbg!(mean(vec![1_i8,2,3,4,5,6]));
- dbg!(mean(vec![1_u8,2,3,4,5,6]));
- dbg!(mean(vec![1_i16,2,3,4,5,6]));
- dbg!(mean(vec![1_u16,2,3,4,5,6]));
- dbg!(mean(vec![1_i32,2,3,4,5,6]));
- dbg!(mean(vec![1_u32,2,3,4,5,6]));
- dbg!(mean(vec![1_i64,2,3,4,5,6]));
- dbg!(mean(vec![1_u64,2,3,4,5,6]));
- dbg!(mean(vec![1_f32,2.,3.,4.,5.,6.]));
- dbg!(mean(vec![1_f64,2.,3.,4.,5.,6.]));
- //dbg!(mean(vec![1_f128,2.,3.,4.,5.,6.]));
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement