I'm looking for a numerically stable method for computing the angle between two 3D vectors. Which of the following methods ought to be preferred?

Method 1: $$ u\times v = ||u||~||v|| \sin(\theta) \textbf{n}\\ u\cdot v = ||u||~||v|| \cos(\theta)\\ \theta = \arctan2(||u\times v||,~u\cdot v) $$

Method 2:

$$ \theta = 2~\arctan2(||u/||u|| - v/||v||~||,~||u/||u|| + v/||v||~||) $$

where method 2 is based on the fact that the sum and difference vectors of two unit (or equal length) vectors are orthogonal.

Or is there an even better method which I haven't thought of? The vectors I am considering have angles typically smaller than 2 degrees.