Evaluating the dot and cross product is probably the best way to work out angles between vectors because you don't have to normalise anything. But the tangent function has a period of pi radians, so when you divide to work out the tangent of the angle you are losing some information. Note that the signs of the dot and cross product together tells you which quadrant the angle comes from. So in fact you can work out the angle without any ambiguity at all. Math libraries for programming languages like C/C++ usually have an atan2() function which is just what you want to get the angle properly.