*            if true then scaling is performed
     * 
     */
    public void realInverse(float[] a, int offa, boolean scale) {
        if (n == 1)
            return;
        switch (plan) {
        case SPLIT_RADIX:
            a[offa + 1] = (float)(0.5 * (a[offa] - a[offa + 1]));
            a[offa] -= a[offa + 1];
            if (n > 4) {
                rftfsub(n, a, offa, nc, w, nw);
                cftbsub(n, a, offa, ip, nw, w);
            } else if (n == 4) {
                cftxc020(a, offa);
            }
            if (scale) {
                scale(n / 2, a, offa, false);
            }
            break;
        case MIXED_RADIX:
            for (int k = 2; k < n; k++) {
                int idx = offa + k;
                float tmp = a[idx - 1];
                a[idx - 1] = a[idx];
                a[idx] = tmp;
            }
            rfftb(a, offa);
            if (scale) {
                scale(n, a, offa, false);
            }
            break;
        case BLUESTEIN:
            bluestein_real_inverse(a, offa);
            if (scale) {
                scale(n, a, offa, false);
            }
            break;
        }

    }