I have a real symmetric $3 \times 3$ matrix and I know all its eigenvalues are positive and irrational. All I care about are the eigenvalues (don't need the eigenvectors).
What is the most efficient way to do this? Speed and accuracy both matter, since this calculation will be repeated billions of time in a code.
The strategy I would personally use is
0) Compute the characteristic polynomial $\chi(\lambda)$.
1) Separate its roots $\lambda_i (i=1, 2, 3)$ by certain $\mu_i (i=1, 2)$ i.e., have
$$0<\lambda_1<\mu_1< \lambda_2<\mu_2<\lambda_3$$
This can be done easily by taking for the $\mu_i$ the eigenvalues of the $2 \times 2$ upper diagonal block of the matrix (interlacing theorem).
2) Take a rather slow method in order to get closer to one of the roots (some steps of dichotomy are not ridiculous), for example $\lambda_1$.
3) Then, refine this root by Newton's method.
4) Then divide $\chi(\lambda)$ by $(\lambda-\lambda_1)$ to get a second degree polynomial whose roots are $\lambda_2$ and $\lambda_3$. No fear of serious loss of accuracy in this operation in such low size matrices.
Remark: An alternative for finding the first root $\lambda_1$: use the Laguerre's method (see "Numerical Recipes").