extern crate rayon; use rayon::prelude::*; fn semicircle(x: f64) -> f64 { (1.0 - x * x).sqrt() } fn parallel_integrate(f: F, points: usize) -> f64 where F: Fn(f64) -> f64 + Sync, { let delta = 1f64 / points as f64; (0..points) .into_par_iter() .map(|i| { let a = i as f64 * delta; delta * (f(a) + f(a + delta)) / 2f64 }) .sum() } fn main() { let pi = 4.0 * parallel_integrate(semicircle, 1_000_000_000_000); println!("Pi: {}", pi); }