28 lines
522 B
Rust
28 lines
522 B
Rust
extern crate rayon;
|
|
|
|
use rayon::prelude::*;
|
|
|
|
fn semicircle(x: f64) -> f64 {
|
|
(1.0 - x * x).sqrt()
|
|
}
|
|
|
|
fn parallel_integrate<F>(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);
|
|
}
|