From 0fc2d57395fd06b98fee582a0daeb74e6559c6ee Mon Sep 17 00:00:00 2001 From: Joshua Simmons Date: Sun, 5 May 2024 16:14:11 +0200 Subject: [PATCH] narcissus-maths: Use `f32_to_i32` for `sin_cos_pi` and `tan_pi` --- engine/narcissus-maths/src/sin_cos_pi.rs | 5 +++-- engine/narcissus-maths/src/tan_pi.rs | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/engine/narcissus-maths/src/sin_cos_pi.rs b/engine/narcissus-maths/src/sin_cos_pi.rs index d46e21d..76c400b 100644 --- a/engine/narcissus-maths/src/sin_cos_pi.rs +++ b/engine/narcissus-maths/src/sin_cos_pi.rs @@ -2,6 +2,8 @@ // // Sollya code for generating these polynomials is in `doc/sincostan.sollya` +use crate::f32_to_i32; + // constants for sin(pi x), cos(pi x) for x on [-1/4,1/4] const F32_SIN_PI_7_K: [f32; 3] = unsafe { std::mem::transmute::<[u32; 3], _>([ @@ -51,8 +53,7 @@ pub fn sin_cos_pi_f32(a: f32) -> (f32, f32) { // Range reduction. let r = (a + a).round_ties_even(); - // SAFETY: The clamp above avoids the possibility of overflow here. - let i = unsafe { r.to_int_unchecked::() } as u32; + let i = f32_to_i32(r) as u32; let r = r.mul_add(-0.5, a); let sx = (i >> 1) << 31; diff --git a/engine/narcissus-maths/src/tan_pi.rs b/engine/narcissus-maths/src/tan_pi.rs index 7a6f852..2a7393f 100644 --- a/engine/narcissus-maths/src/tan_pi.rs +++ b/engine/narcissus-maths/src/tan_pi.rs @@ -4,6 +4,8 @@ // // Sollya code for generating these polynomials is in `doc/sincostan.sollya` +use crate::f32_to_i32; + const F32_TAN_PI_15_K: [f32; 7] = unsafe { std::mem::transmute::<[u32; 7], _>([ 0x41255def, // 0x1.4abbdep3 @@ -34,8 +36,7 @@ pub fn tan_pi_f32(a: f32) -> f32 { // Range reduction. let r = (a + a).round_ties_even(); - // SAFETY: The clamp above avoids the possibility of overflow here. - let i = unsafe { r.to_int_unchecked::() } as u32; + let i = f32_to_i32(r) as u32; let r = r.mul_add(-0.5, a); let e = if i.wrapping_add(1) & 2 != 0 { -- 2.49.0