code: public static double computeTauAndDivideRow( final int blockLength ,
                                                   final DSubmatrixD1 Y ,
                                                   final int row , int colStart , final double max ) {
          final int height = Math.min(blockLength , Y.row1-Y.row0);
  
          final double dataY[] = Y.original.data;
  
          double top=0;
          double norm2 = 0;
  
          int startJ = Y.col0 + colStart - colStart%blockLength;
          colStart = colStart%blockLength;
  
          for( int j = startJ; j < Y.col1; j += blockLength ) {
              int width = Math.min( blockLength , Y.col1 - j );
  
              int index = Y.row0*Y.original.numCols + height*j + row*width;
  
              if( j == startJ ) {
                  index += colStart;
                  // save this value so that the sign can be determined later on
                  top = dataY[index] /= max;
                  norm2 += top*top;
                  index++;
  
                  for( int k = colStart+1; k < width; k++ ) {
                      double val = dataY[index++] /= max;
                      norm2 += val*val;
                  }
              } else {
                  for( int k = 0; k < width; k++ ) {
                      double val = dataY[index++] /= max;
                      norm2 += val*val;
                  }
              }
          }
  
          norm2 = Math.sqrt(norm2);
  
          if( top < 0 )
              norm2 = -norm2;
  
          return norm2;
      }
docs: <p>
  From the specified row of Y tau is computed and each element is divided by 'max'.
  See code below:
  </p>
  
  <pre>
  for j=row:Y.numCols
  Y[row][j] = u[row][j] / max
  tau = tau + u[row][j]*u[row][j]
  end
  tau = sqrt(tau)
  if( Y[row][row] &lt; 0 )
  tau = -tau;
  </pre>
  
  @param row Which row in the block will be processed
  @param colStart The first column that computation of tau will start at
  @param max used to normalize and prevent buffer over flow