v.assign(0);
v.viewDiagonal().assign(1);
for (int m = high - 1; m >= low + 1; m--) {
if (hessenBerg.getQuick(m, m - 1) != 0.0) {
ort.viewPart(m + 1, high - m).assign(hessenBerg.viewColumn(m - 1).viewPart(m + 1, high - m));
for (int j = m; j <= high; j++) {
double g = ort.viewPart(m, high - m + 1).dot(v.viewColumn(j).viewPart(m, high - m + 1));
// Double division avoids possible underflow
g = (g / ort.getQuick(m)) / hessenBerg.getQuick(m, m - 1);
v.viewColumn(j).viewPart(m, high - m + 1).assign(ort.viewPart(m, high - m + 1), Functions.plusMult(g));