Mathematica has a rigorous, general way to deal with this.
roots = x /. Solve[x^3 - 3 x - 1 == 0, x, Cubics -> False]
{Root[-1 - 3 #1 + #1^3 &, 1], Root[-1 - 3 #1 + #1^3 &, 2],
Root[-1 - 3 #1 + #1^3 &, 3]}
Now, that looks like it really hasn't accomplished anything. In this particular case, the reduction to Root[] objects is trivial. However, Root[] objects are the best general-purpose representation of roots.
Root[] objects with precise coefficients are precise numbers. Mathematica can extract their properties:
Map[Element[#, Reals] &, roots]
{True, True, True}
Mathematica can also rapidly compute numeric approximations of them, without parasitic imaginary parts:
N[roots, 100]
{-1.532088886237956070404785301110833347871664914160790491708090569284310777713749447056458553361096987,
-0.3472963553338606977034332535386295920007513543681387744724827562641316442780294708430332263147991480,
1.879385241571816768108218554649462939872416268528929266180573325548442421991778917899491779675896135}