On the other hand, in some cases the (R, u, theta) represetation makes the code much cleaner, and that makes me happy. Also, some of the operations seem to have less numerical instability than the (w, x, y, z) versions.
On the gripping hand, the lack of a unique identity quaternion makes the (R, u, theta) sprout more special cases in various places, which is annoying.
But somehow, magically, when I wired it all in to implement arcball rotation it worked perfectly the first time, so something has to be going right in terms of coding clarity.
I'm so conflicted.