/*
* pi.rs
* Neil Gershenfeld 12/21/24
* Rust pi calculation benchmark
* pi = 3.14159265358979323846
*/

use std::time::SystemTime;

const NPTS:u64 = 1e9 as u64;

fn main() {
    let a:f64 = 0.5;
    let b:f64 = 0.75;
    let c:f64 = 0.25;
    let mut pi:f64 = 0.0;
    let start = SystemTime::now().duration_since(SystemTime::UNIX_EPOCH).unwrap().as_micros();
    for i in 1..=NPTS {
        pi += a/(((i as f64)-b)*((i as f64)-c));
        }
    let end = SystemTime::now().duration_since(SystemTime::UNIX_EPOCH).unwrap().as_micros();
    let dt = ((end-start) as f64)/1e6;
    let mflops = (NPTS as f64)*5.0/((dt as f64)*1e6);
    println!("NPTS = {NPTS}, pi = {pi}");
    println!("time = {dt:.3}, estimated MFlops = {mflops:.0}");
}