bidradar 0.1.0

Auction bid radar and market analyzer for real-time bidding analysis
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;
    }
}