use rayon ::prelude :: *;
use deterministic_rand :: { distributions ::Uniform, Rng, Hrng };
#[ allow(clippy ::float_cmp) ]
fn main()
{
let range = Uniform ::new(-1.0f64, 1.0);
let manager = Hrng ::master();
let got = ( 0..1000 )
.into_par_iter()
.map
(
| i |
{
let child = manager.child( i );
let rng = child.rng_ref();
let mut rng = rng.lock().unwrap();
let mut count = 0;
for _ in 0..10_000
{
let a = rng.sample( range );
let b = rng.sample( range );
if a * a + b * b <= 1.0
{
count += 1;
}
}
count
}
)
.sum :: < u64 >();
let got_pi = 4. * (got as f64) / f64 ::from(10_000 * 1000);
#[ cfg(feature = "determinism") ]
assert_eq!(got_pi, 3.141_044_8);
println!("PI = {got_pi}");
}