Guest User

Untitled

a guest
Jul 17th, 2018
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.34 KB | None | 0 0
  1. extern crate rand;
  2. extern crate rayon;
  3.  
  4. use rand::{
  5. distributions::{Distribution, Uniform},
  6. thread_rng,
  7. };
  8. use rayon::prelude::*;
  9. use std::f64::consts::PI;
  10.  
  11. fn buffon(number: usize, length: f64, spacing: f64) -> usize {
  12. assert!(length > 0.0);
  13. assert!(spacing > 0.0);
  14.  
  15. let center = length / 2.0;
  16. let angles = Uniform::new_inclusive(0.0, PI / 2.0);
  17. let positions = Uniform::new_inclusive(0.0, spacing / 2.0);
  18.  
  19. (0..number)
  20. .into_par_iter()
  21. .map(|_| {
  22. let mut r = thread_rng();
  23. let a = angles.sample(&mut r);
  24. let p = positions.sample(&mut r);
  25. (a, p)
  26. })
  27. .filter(|&(a, p)| p < center * a.cos())
  28. .count()
  29. }
  30.  
  31. fn main() {
  32. let number = 4_000_000;
  33. let length = 2.0;
  34. let spacing = 4.0;
  35.  
  36. println!("--------------------------");
  37. println!("Simulador Agulha de Buffon");
  38. println!("--------------------------");
  39. println!("Nr. Agulhas: {}", number);
  40. println!("Comprimento: {}", length);
  41. println!("Espaçamento: {}", spacing);
  42. println!("--------------------------");
  43.  
  44. let hits = buffon(number, length, spacing);
  45. let pi = number as f64 / hits as f64;
  46.  
  47. println!(" Resultado: {}", hits);
  48. println!(" Estimativa: {:.8}", pi);
  49. println!(" Erro Total: {:+.4e}", pi - PI);
  50. println!("--------------------------");
  51. }
Add Comment
Please, Sign In to add comment