44 lines
1.4 KiB
Rust
44 lines
1.4 KiB
Rust
use std::f64::consts::PI;
|
|
use std::fs::File;
|
|
use std::io::prelude::*;
|
|
use std::path::Path;
|
|
|
|
const TABLE_DEPTH: usize = 8;
|
|
const TABLE_SIZE: usize = 1 << TABLE_DEPTH;
|
|
// Treat sin and cos as unsigned values since the sign will always be
|
|
// positive in the range [0, pi/4).
|
|
const SINCOS_MAX: f64 = u16::MAX as f64;
|
|
|
|
fn main() {
|
|
let path = Path::new("src").join("cossin_table.txt");
|
|
let display = path.display();
|
|
|
|
let mut file = match File::create(&path) {
|
|
Err(why) => panic!("failed to write to {}: {}", display, why),
|
|
Ok(file) => file,
|
|
};
|
|
|
|
match file.write_all("[\n".as_bytes()) {
|
|
Err(why) => panic!("failed to write to {}: {}", display, why),
|
|
Ok(_) => (),
|
|
}
|
|
|
|
let phase_delta = PI / 4. / TABLE_SIZE as f64;
|
|
let phase_offset = phase_delta / 2.;
|
|
for i in 0..TABLE_SIZE {
|
|
let phase = phase_offset + phase_delta * (i as f64);
|
|
let cos = ((phase.cos() - 0.5) * 2. * SINCOS_MAX).round() as u16;
|
|
let sin = (phase.sin() * SINCOS_MAX).round() as u16;
|
|
let s = format!(" ({}, {}),\n", cos, sin);
|
|
match file.write_all(s.as_bytes()) {
|
|
Err(why) => panic!("failed to write to {}: {}", display, why),
|
|
Ok(_) => (),
|
|
}
|
|
}
|
|
|
|
match file.write_all("]\n".as_bytes()) {
|
|
Err(why) => panic!("failed to write to {}: {}", display, why),
|
|
Ok(_) => (),
|
|
}
|
|
}
|