The algorithm is not numerical stable when A is ill-conditioned. A possible approach for preconditioning is a sparse random projection followed by a QR and use the R matrix as the preconditioner. Another approach is following the TSQR implementation from dgleich, get the QR and then compute SVD of R.