private void cftbsub(int n, double[] a, int[] ip, int ipP, int nw, double[] w) {
        int m;

        if (n > 32) {
            m = n >> 2;
            cftb1st(n, a, w, nw - m);
            if (n > CDFT_RECURSIVE_N) {
                cftrec1(m, a, 0, nw, w);
                cftrec2(m, a, m, nw, w);
                cftrec1(m, a, 2 * m, nw, w);
                cftrec1(m, a, 3 * m, nw, w);
            } else if (m > 32) {
                cftexp1(n, a, 0, nw, w);
            } else {
                cftfx41(n, a, 0, nw, w);
            }
            bitrv2conj(n, ip, ipP, a);
        } else if (n > 8) {
            if (n == 32) {
                cftf161(a, 0, w, nw - 8);
                bitrv216neg(a);
            } else {
                cftf081(a, 0, w, 0);
                bitrv208neg(a);
            }
        } else if (n == 8) {
            cftb040(a);
        } else if (n == 4) {
            cftx020(a);
        }
    }