11use std:: simd:: { f32x16, f64x8, StdFloat } ;
22
3- use num_traits:: Float ;
3+ use num_traits:: { Float , FloatConst } ;
44
55macro_rules! fft_butterfly_n_simd {
66 ( $func_name: ident, $precision: ty, $lanes: literal, $simd_vector: ty) => {
@@ -273,7 +273,7 @@ pub(crate) fn fft_dit_chunk_4<T: Float>(reals: &mut [T], imags: &mut [T]) {
273273 "aarch64+neon" , // ARM64 with NEON (Apple Silicon M1/M2)
274274) ) ]
275275#[ inline]
276- pub ( crate ) fn fft_dit_chunk_8 < T : Float > ( reals : & mut [ T ] , imags : & mut [ T ] ) {
276+ pub ( crate ) fn fft_dit_chunk_8 < T : Float + FloatConst > ( reals : & mut [ T ] , imags : & mut [ T ] ) {
277277 const DIST : usize = 4 ;
278278 const CHUNK_SIZE : usize = DIST << 1 ;
279279
@@ -287,7 +287,7 @@ pub(crate) fn fft_dit_chunk_8<T: Float>(reals: &mut [T], imags: &mut [T]) {
287287 let ( imags_s0, imags_s1) = imags_chunk. split_at_mut ( DIST ) ;
288288
289289 // Hardcoded twiddle factor for W_8
290- let sqrt2_2 = T :: from ( 0.7071067811865476 ) . unwrap ( ) ; // sqrt(2)/2
290+ let sqrt2_2 = T :: FRAC_1_SQRT_2 ( ) ; // sqrt(2)/2
291291
292292 // k=0: W_8^0 = 1
293293 let in0_re = reals_s0[ 0 ] ;
@@ -350,7 +350,7 @@ pub(crate) fn fft_dit_chunk_8<T: Float>(reals: &mut [T], imags: &mut [T]) {
350350 "aarch64+neon" , // ARM64 with NEON (Apple Silicon M1/M2)
351351) ) ]
352352#[ inline]
353- pub ( crate ) fn fft_dit_chunk_16 < T : Float > ( reals : & mut [ T ] , imags : & mut [ T ] ) {
353+ pub ( crate ) fn fft_dit_chunk_16 < T : Float + FloatConst > ( reals : & mut [ T ] , imags : & mut [ T ] ) {
354354 const DIST : usize = 8 ;
355355 const CHUNK_SIZE : usize = DIST << 1 ;
356356
@@ -366,7 +366,7 @@ pub(crate) fn fft_dit_chunk_16<T: Float>(reals: &mut [T], imags: &mut [T]) {
366366 // Hardcoded twiddle factors for W_16
367367 let cos_pi_8 = T :: from ( 0.9238795325112867 ) . unwrap ( ) ; // cos(π/8)
368368 let sin_pi_8 = T :: from ( 0.3826834323650898 ) . unwrap ( ) ; // sin(π/8)
369- let sqrt2_2 = T :: from ( 0.7071067811865476 ) . unwrap ( ) ; // sqrt(2)/2
369+ let sqrt2_2 = T :: FRAC_1_SQRT_2 ( ) ; // sqrt(2)/2
370370
371371 // k=0: W_16^0 = 1
372372 let in0_re = reals_s0[ 0 ] ;
@@ -470,7 +470,7 @@ pub(crate) fn fft_dit_chunk_16<T: Float>(reals: &mut [T], imags: &mut [T]) {
470470 "aarch64+neon" , // ARM64 with NEON (Apple Silicon M1/M2)
471471) ) ]
472472#[ inline]
473- pub ( crate ) fn fft_dit_chunk_32 < T : Float > ( reals : & mut [ T ] , imags : & mut [ T ] ) {
473+ pub ( crate ) fn fft_dit_chunk_32 < T : Float + FloatConst > ( reals : & mut [ T ] , imags : & mut [ T ] ) {
474474 const DIST : usize = 16 ;
475475 const CHUNK_SIZE : usize = DIST << 1 ;
476476
@@ -490,7 +490,7 @@ pub(crate) fn fft_dit_chunk_32<T: Float>(reals: &mut [T], imags: &mut [T]) {
490490 let sin_pi_8 = T :: from ( 0.3826834323650898 ) . unwrap ( ) ; // sin(π/8)
491491 let cos_3pi_16 = T :: from ( 0.8314696123025452 ) . unwrap ( ) ; // cos(3π/16)
492492 let sin_3pi_16 = T :: from ( 0.5555702330196022 ) . unwrap ( ) ; // sin(3π/16)
493- let sqrt2_2 = T :: from ( 0.7071067811865476 ) . unwrap ( ) ; // sqrt(2)/2
493+ let sqrt2_2 = T :: FRAC_1_SQRT_2 ( ) ; // sqrt(2)/2
494494 let cos_5pi_16 = T :: from ( 0.5555702330196022 ) . unwrap ( ) ; // cos(5π/16)
495495 let sin_5pi_16 = T :: from ( 0.8314696123025452 ) . unwrap ( ) ; // sin(5π/16)
496496 let cos_3pi_8 = T :: from ( 0.3826834323650898 ) . unwrap ( ) ; // cos(3π/8)
0 commit comments