*            index of the first element in array <code>a</code>
     */
    public void realForward(float[] a, int offa) {
        if (n == 1)
            return;

        switch (plan) {
        case SPLIT_RADIX:
            float xi;

            if (n > 4) {
                cftfsub(n, a, offa, ip, nw, w);
                rftfsub(n, a, offa, nc, w, nw);
            } else if (n == 4) {
                cftx020(a, offa);
            }
            xi = a[offa] - a[offa + 1];
            a[offa] += a[offa + 1];
            a[offa + 1] = xi;
            break;
        case MIXED_RADIX:
            rfftf(a, offa);
            for (int k = n - 1; k >= 2; k--) {
                int idx = offa + k;
                float tmp = a[idx];
                a[idx] = a[idx - 1];
                a[idx - 1] = tmp;
            }
            break;
        case BLUESTEIN:
            bluestein_real_forward(a, offa);
            break;
        }
    }