use std::time::Instant; use rand::prelude::*; use std::f64::consts; use console::Term; const MAX_LOOPS: u64 = 1000000; fn main() { let mut total_count = 0; let now = Instant::now(); let term = Term::stdout(); println!(); for i in 0..MAX_LOOPS { let count = get_sum_count(); total_count += count; if cfg!(show_msg) { let average = total_count as f64 / i as f64; let pererror = (average - consts::E).abs() / consts::E * 100.0; let cur_percent = i as f64 / MAX_LOOPS as f64 * 100.0; term.move_cursor_up(1).ok(); term.write_line(&format!(" {:6.10}\t{:.10}\t{:.2}% err\t{:.2}%", i, average, pererror, cur_percent)).ok(); } //console.log(i.toString().padEnd(10), average.toString().padEnd(20), pererror.toString().padEnd(22), "%err", " ", " ", currentPercentage + "% complete"); } let average = total_count as f64 / MAX_LOOPS as f64; println!("---------------------------"); println!("Iterations: {}", MAX_LOOPS); println!("Final Average: {}", average); println!("Took: {:?}", now.elapsed()) } fn get_sum_count() -> u64 { let mut count: u64 = 0; let mut sum: f64 = 0.0; while sum <= 1.0 { count += 1; sum += rand::thread_rng().gen::(); } //console.log("Count=" + currentCount + " | Sum: " + sum + " | i=" + i) return count; }