use std::env;
use std::fs::File;
use std::io::Write;
use std::path::Path;
fn compute_theta_table() -> [f64; 64] {
(0..64)
.map(|i| f64::atan2(1.0, f64::powf(2.0, i as _)))
.collect::<Vec<f64>>()
.try_into()
.unwrap()
}
fn compute_k_table() -> [f64; 64] {
let mut k = 1.0;
(0..64)
.map(|i| { k *= 1.0 / f64::sqrt(1.0 + f64::powf(2.0, -2.0 * i as f64)); k })
.collect::<Vec<f64>>()
.try_into()
.unwrap()
}
fn main() {
let out_dir = env::var_os("OUT_DIR").unwrap();
let dest_path = Path::new(&out_dir).join("cordic_tables.rs");
let mut f = File::create(dest_path).unwrap();
let theta_table = compute_theta_table();
writeln!(&mut f, "#[allow(clippy::approx_constant)]").unwrap();
writeln!(&mut f, "const THETA_TABLE: [f64; {}] = {:?};", theta_table.len(), theta_table).unwrap();
let k_table = compute_k_table();
writeln!(&mut f, "const K_TABLE: [f64; {}] = {:?};", k_table.len(), k_table).unwrap();
}