code: private void performDynamicStep() {
          // initially look for singular values of zero
          if( findingZeros ) {
              if( steps > 6 ) {
                  findingZeros = false;
              } else {
                  double scale = computeBulgeScale();
                  performImplicitSingleStep(scale,0,false);
              }
          } else {
              // For very large and very small numbers the only way to prevent overflow/underflow
              // is to have a common scale between the wilkinson shift and the implicit single step
              // What happens if you don't is that when the wilkinson shift returns the value it
              // computed it multiplies it by the scale twice, which will cause an overflow
              double scale = computeBulgeScale();
              // use the wilkinson shift to perform a step
              double lambda = selectWilkinsonShift(scale);
  
              performImplicitSingleStep(scale,lambda,false);
          }
      }
docs: Here the lambda in the implicit step is determined dynamically.  At first
  it selects zeros to quickly reveal singular values that are zero or close to zero.
  Then it computes it using a Wilkinson shift.