use std::{
fs::File,
io::{BufWriter, Write},
path::PathBuf,
};
use rand::rngs::SmallRng;
use rand::{Rng, SeedableRng, rng};
const OUTPUT_PATH: &str = "src/common/precompute_sample2.rs";
const MAX_VALUE: u64 = 0b1 << 16;
fn main() -> std::io::Result<()> {
let path = PathBuf::from(env!("CARGO_MANIFEST_DIR")).join(OUTPUT_PATH);
let file = File::create(&path)?;
let mut seed_rng = rng();
let mut generator = SmallRng::from_rng(&mut seed_rng);
let mut writer = BufWriter::new(file);
writeln!(
writer,
"//! Auto-generated by `cargo run --bin generate_precomputed_sample2`."
)?;
writeln!(writer, "//! Precomputes skip number of sampling rate 0.01.")?;
writeln!(
writer,
"pub static PRECOMPUTED_SAMPLE_RATE_1PERCENT: [f64; 0x10000] = ["
)?;
for _ in 0..MAX_VALUE {
let k = loop {
let r = generator.random::<f64>();
if r != 0.0_f64 && r != 1.0_f64 {
break r;
}
};
let f = (1.0 - k).ln() / 0.99_f64.ln();
writeln!(writer, " {f},")?;
}
writeln!(writer, "];")?;
Ok(())
}