diff options
Diffstat (limited to 'azalea-core/src')
| -rwxr-xr-x | azalea-core/src/lib.rs | 1 | ||||
| -rw-r--r-- | azalea-core/src/math.rs | 24 |
2 files changed, 25 insertions, 0 deletions
diff --git a/azalea-core/src/lib.rs b/azalea-core/src/lib.rs index 8ed62b06..6554d71d 100755 --- a/azalea-core/src/lib.rs +++ b/azalea-core/src/lib.rs @@ -1,6 +1,7 @@ #![doc = include_str!("../README.md")] #![feature(int_roundings)] #![feature(const_for)] +#![feature(lazy_cell)] #![allow(incomplete_features)] #![feature(generic_const_exprs)] diff --git a/azalea-core/src/math.rs b/azalea-core/src/math.rs index 2e5e78f6..40d147e4 100644 --- a/azalea-core/src/math.rs +++ b/azalea-core/src/math.rs @@ -1,3 +1,27 @@ +use std::sync::LazyLock; + +pub static SIN: LazyLock<[f32; 65536]> = LazyLock::new(|| { + let mut sin = [0.0; 65536]; + for i in 0..65536 { + sin[i] = f64::sin((i as f64) * 3.141592653589793 * 2.0 / 65536.0) as f32; + } + sin +}); + +/// A sine function that uses a lookup table. +pub fn sin(var0: f32) -> f32 { + let var0 = var0 * 10430.378; + let var0 = var0 as usize; + SIN[var0 & 65535] +} + +/// A cosine function that uses a lookup table. +pub fn cos(var0: f32) -> f32 { + let var0 = var0 * 10430.378 + 16384.0; + let var0 = var0 as usize; + SIN[var0 & 65535] +} + // TODO: make this generic pub fn binary_search(mut min: i32, max: i32, predicate: &dyn Fn(i32) -> bool) -> i32 { let mut diff = max - min; |
