docs: public double selectWilkinsonShift( double scale ) {
  
          double a11,a22;
  
          if( x2-x1 > 1 ) {
              double d1 = diag[x2-1] / scale;
              double o1 = off[x2-2] / scale;
              double d2 = diag[x2] / scale;
              double o2 = off[x2-1] / scale;
  
              a11 = o1*o1 + d1*d1;
              a22 = o2*o2 + d2*d2;
  
              eigenSmall.symm2x2_fast(a11 , o2*d1 , a22);
          } else {
              double a = diag[x2-1]/scale;
              double b = off[x2-1]/scale;
              double c = diag[x2]/scale;
  
              a11 = a*a;
              a22 = b*b + c*c;
  
              eigenSmall.symm2x2_fast(a11, a*b , a22);
          }
  
          // return the eigenvalue closest to a22
          double diff0 = Math.abs(eigenSmall.value0.real-a22);
          double diff1 = Math.abs(eigenSmall.value1.real-a22);
  
          return diff0 < diff1 ? eigenSmall.value0.real :  eigenSmall.value1.real;
      }