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 = \operatorname{arctan2}(\| u\times v \|, u\cdot v) $$
Method 2:
$$ \theta = 2 \operatorname{arctan2}\bigg(\bigg\|\frac{u}{\|u\|} - \frac{v}{\|v\|}\bigg\|, \bigg\|\frac{u}{\|u\|} + \frac{v}{\|v\|} \bigg\|\bigg) $$
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.