pub fn ifft(a: &mut [Complex<f64>])Examples found in repository?
crates/competitive/src/math/fast_fourier_transform.rs (line 114)
99 fn inverse_transform(mut f: Self::F, len: usize) -> Self::T {
100 let n = len.max(4).next_power_of_two();
101 assert_eq!(f.len(), n / 2);
102 f[0] = Complex::new((f[0].re + f[0].im) * 0.5, (f[0].re - f[0].im) * 0.5);
103 f[n / 4] = f[n / 4].conjugate();
104 let w = Complex::primitive_nth_root_of_unity(n as f64);
105 let mut wk = Complex::<f64>::one();
106 for k in 1..n / 4 {
107 wk *= w;
108 let c = wk.transpose().conjugate() + 1.;
109 let d = c * (f[k] - f[n / 2 - k].conjugate()) * 0.5;
110 f[k] -= d;
111 f[n / 2 - k] += d.conjugate();
112 }
113 bit_reverse(&mut f);
114 ifft(&mut f);
115 let inv = 1. / (n / 2) as f64;
116 (0..len)
117 .map(|i| (inv * if i & 1 == 0 { f[i / 2].re } else { f[i / 2].im }).round() as i64)
118 .collect()
119 }