Skip to main content

fft

Function fft 

Source
pub fn fft(a: &mut [Complex<f64>])
Examples found in repository?
crates/competitive/src/math/fast_fourier_transform.rs (line 392)
382pub fn transform_real(t: impl IntoIterator<Item = f64>, len: usize) -> Vec<Complex<f64>> {
383    let n = len.max(4).next_power_of_two();
384    let mut f = vec![Complex::zero(); n / 2];
385    for (i, t) in t.into_iter().enumerate() {
386        if i & 1 == 0 {
387            f[i / 2].re = t;
388        } else {
389            f[i / 2].im = t;
390        }
391    }
392    fft(&mut f);
393    bit_reverse(&mut f);
394    f[0] = Complex::new(f[0].re + f[0].im, f[0].re - f[0].im);
395    f[n / 4] = f[n / 4].conjugate();
396    real_twiddles(n, false, |k, wk| {
397        let c = wk.conjugate().transpose() + 1.;
398        let d = c * (f[k] - f[n / 2 - k].conjugate()) * 0.5;
399        f[k] -= d;
400        f[n / 2 - k] += d.conjugate();
401    });
402    f
403}