use std::f64::consts::PI;
pub fn fft_real(data: &mut [f64]) {
let nn = data.len() / 2;
let n = 2 * nn;
let mut j = 1;
for i in (1..n).step_by(2) {
if j > i {
data.swap(j - 1, i - 1);
data.swap(j, i);
}
let mut m = n >> 1;
while m >= 2 && j > m { j -= m; m >>= 1; }
j += m;
}
let mut mmax = 2;
while n > mmax {
let istep = 2 * mmax;
let theta = 2.0 * PI / mmax as f64;
let wpr = -2.0 * (0.5 * theta).sin().powi(2);
let wpi = theta.sin();
let mut wr = 1.0;
let mut wi = 0.0;
for m in (1..mmax).step_by(2) {
for i in (m..=n).step_by(istep) {
let j = i + mmax;
let tempr = wr * data[j - 1] - wi * data[j];
let tempi = wr * data[j] + wi * data[j - 1];
data[j - 1] = data[i - 1] - tempr;
data[j] = data[i] - tempi;
data[i - 1] += tempr;
data[i] += tempi;
}
let wtemp = wr;
wr = wr * wpr - wi * wpi + wr;
wi = wi * wpr + wtemp * wpi + wi;
}
mmax = istep;
}
}