function tred2()

in benchmarks/JetStream2/ARES-6/ml/index.js [4882:4991]


    function tred2(n, e, d, V) {

        var f, g, h, i, j, k,
            hh, scale;

        for (j = 0; j < n; j++) {
            d[j] = V[n - 1][j];
        }

        for (i = n - 1; i > 0; i--) {
            scale = 0;
            h = 0;
            for (k = 0; k < i; k++) {
                scale = scale + Math.abs(d[k]);
            }

            if (scale === 0) {
                e[i] = d[i - 1];
                for (j = 0; j < i; j++) {
                    d[j] = V[i - 1][j];
                    V[i][j] = 0;
                    V[j][i] = 0;
                }
            } else {
                for (k = 0; k < i; k++) {
                    d[k] /= scale;
                    h += d[k] * d[k];
                }

                f = d[i - 1];
                g = Math.sqrt(h);
                if (f > 0) {
                    g = -g;
                }

                e[i] = scale * g;
                h = h - f * g;
                d[i - 1] = f - g;
                for (j = 0; j < i; j++) {
                    e[j] = 0;
                }

                for (j = 0; j < i; j++) {
                    f = d[j];
                    V[j][i] = f;
                    g = e[j] + V[j][j] * f;
                    for (k = j + 1; k <= i - 1; k++) {
                        g += V[k][j] * d[k];
                        e[k] += V[k][j] * f;
                    }
                    e[j] = g;
                }

                f = 0;
                for (j = 0; j < i; j++) {
                    e[j] /= h;
                    f += e[j] * d[j];
                }

                hh = f / (h + h);
                for (j = 0; j < i; j++) {
                    e[j] -= hh * d[j];
                }

                for (j = 0; j < i; j++) {
                    f = d[j];
                    g = e[j];
                    for (k = j; k <= i - 1; k++) {
                        V[k][j] -= (f * e[k] + g * d[k]);
                    }
                    d[j] = V[i - 1][j];
                    V[i][j] = 0;
                }
            }
            d[i] = h;
        }

        for (i = 0; i < n - 1; i++) {
            V[n - 1][i] = V[i][i];
            V[i][i] = 1;
            h = d[i + 1];
            if (h !== 0) {
                for (k = 0; k <= i; k++) {
                    d[k] = V[k][i + 1] / h;
                }

                for (j = 0; j <= i; j++) {
                    g = 0;
                    for (k = 0; k <= i; k++) {
                        g += V[k][i + 1] * V[k][j];
                    }
                    for (k = 0; k <= i; k++) {
                        V[k][j] -= g * d[k];
                    }
                }
            }

            for (k = 0; k <= i; k++) {
                V[k][i + 1] = 0;
            }
        }

        for (j = 0; j < n; j++) {
            d[j] = V[n - 1][j];
            V[n - 1][j] = 0;
        }

        V[n - 1][n - 1] = 1;
        e[0] = 0;
    }