Advertisement
Guest User

Untitled

a guest
Aug 20th, 2019
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.48 KB | None | 0 0
  1. use std::ops::Add;
  2. use std::ops::Div;
  3. use num::{Zero, cast::AsPrimitive};
  4.  
  5. fn mean_impl<T, O, It, OUTPUT>(it: It) -> OUTPUT // OUTPUT::Output
  6. where
  7. It: IntoIterator<Item = T>,
  8. T: Add<Output = O>,
  9. O: AsPrimitive<OUTPUT> + Zero + Add<T, Output = O>,
  10. OUTPUT: Copy + 'static + Div<Output = OUTPUT>,
  11. usize: AsPrimitive<OUTPUT>,
  12. {
  13. let (count, total) = it
  14. .into_iter()
  15. .fold((0_usize, O::zero()), |(count, total), x| (count + 1, total + x));
  16.  
  17. total.as_() / count.as_()
  18. }
  19.  
  20. fn mean<T, O, It>(it: It) -> f64
  21. where
  22. It: IntoIterator<Item = T>,
  23. T: Add<Output = O>,
  24. O: AsPrimitive<f64> + Zero + Add<T, Output = O>,
  25. {
  26. mean_impl(it)
  27. }
  28.  
  29. fn main() {
  30. dbg!(mean(&[1_i8,2,3,4,5,6]));
  31. dbg!(mean(&[1_u8,2,3,4,5,6]));
  32. dbg!(mean(&[1_i16,2,3,4,5,6]));
  33. dbg!(mean(&[1_u16,2,3,4,5,6]));
  34. dbg!(mean(&[1_i32,2,3,4,5,6]));
  35. dbg!(mean(&[1_u32,2,3,4,5,6]));
  36. dbg!(mean(&[1_i64,2,3,4,5,6]));
  37. dbg!(mean(&[1_u64,2,3,4,5,6]));
  38. dbg!(mean(&[1_f32,2.,3.,4.,5.,6.]));
  39. dbg!(mean(&[1_f64,2.,3.,4.,5.,6.]));
  40. dbg!(mean(vec![1_i8,2,3,4,5,6]));
  41. dbg!(mean(vec![1_u8,2,3,4,5,6]));
  42. dbg!(mean(vec![1_i16,2,3,4,5,6]));
  43. dbg!(mean(vec![1_u16,2,3,4,5,6]));
  44. dbg!(mean(vec![1_i32,2,3,4,5,6]));
  45. dbg!(mean(vec![1_u32,2,3,4,5,6]));
  46. dbg!(mean(vec![1_i64,2,3,4,5,6]));
  47. dbg!(mean(vec![1_u64,2,3,4,5,6]));
  48. dbg!(mean(vec![1_f32,2.,3.,4.,5.,6.]));
  49. dbg!(mean(vec![1_f64,2.,3.,4.,5.,6.]));
  50. //dbg!(mean(vec![1_f128,2.,3.,4.,5.,6.]));
  51. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement