As the responses show, there are a number of quick "probably real" tests. In general, the problem is undecidable, however. This is an easy corollary of [Richardson's theorem][1], which says that it is impossible to decide if two real expressions $x$ and $y$ are equal. Assuming Richardson's theorem, note that $(x-y)i$ is real if and only if $x=y$. As a more mundane example, that arises in common practice with Mathematica, consider the polynomial $p(x)=13x^3-13x-1$. It's easy to see that all three roots are real (even if they don't look it), yet they don't pass any of the test here. roots = x /. Solve[13 x^3 - 13 x - 1 == 0, x] Internal`RealValuedNumericQ /@ roots ![enter image description here][2] Given the undecidability, perhaps you might as well use some numerical evaluation, as in realQ[x_] := Internal`RealValuedNumericQ[Chop[N[x]]] This seems to work for all the examples on this page, although, we could certainly find examples where it fails. [1]: http://en.wikipedia.org/wiki/Richardson%27s_theorem [2]: https://i.sstatic.net/KKEbT.png