void svd_rotate(ref float[,] vtav, ref float[,] v, int a, int b)
{
if (vtav[a, b] == 0.0f) return;
float c, s;
givens_coeffs_sym(vtav[a, a], vtav[a, b], vtav[b, b], out c, out s);
svd_rotateq_xy(ref vtav[a, a], ref vtav[b, b], ref vtav[a, b], c, s);
svd_rotate_xy(ref vtav[0, 3 - b], ref vtav[1 - a, 2], c, s);
vtav[a, b] = 0.0f;
svd_rotate_xy(ref v[0, a], ref v[0, b], c, s);
svd_rotate_xy(ref v[1, a], ref v[1, b], c, s);
svd_rotate_xy(ref v[2, a], ref v[2, b], c, s);
}