--- ./boost/math/octonion.hpp~	2011-05-20 17:58:33.000000000 +0900
+++ ./boost/math/octonion.hpp	2011-08-01 22:14:24.000000000 +0900
@@ -4797,9 +4797,9 @@
             octonion  <T> r = -u*log(q*(u) + sqrt(static_cast<T>(1) - pow(q, 2)));
             return(r.real() + r.unreal()*static_cast<T>((abs(unreal(q)) != static_cast<T>(0) || real(q) < 0) ? 1 : -1));
 #else
-            // asin(z) = 1/UVq asinh(UVq z)
-            //return(static_cast<T>(1)/u*asinh(u*q)); // the signs of imagpart are different with complex ones when |Vq| == 0 && Sq > 0
-            octonion  <T> r = static_cast<T>(1)/u*asinh(u*q);
+            // asin(q) = 1/UVq asinh(q UVq)
+            //return(static_cast<T>(1)/u*asinh(q*u)); // the signs of imagpart are different with complex ones when |Vq| == 0 && Sq > 0
+            octonion  <T> r = static_cast<T>(1)/u*asinh(q*u);
             return(r.real() + r.unreal()*static_cast<T>((abs(unreal(q)) != static_cast<T>(0) || real(q) < 0) ? 1 : -1));
 #endif
         }
@@ -4820,16 +4820,16 @@
                                      (q.R_component_8()==static_cast<T>(0)) ? 0 : q.R_component_8()*inf));
             octonion  <T> u = (abs(unreal(q)) != static_cast<T>(0)) ? unreal(q)/abs(unreal(q)) : octonion  <T>(0, 1, 0, 0, 0, 0, 0, 0);
 #if 1
-            // atan(q) = 1/(2UVq) log( (1+q UVq)/(1-q UVq) )
-            //  = -UVq/2 log( (1+q UVq)/(1-q UVq) )
-            //return(-u/static_cast<T>(2)*log((static_cast<T>(1)+q*(u))/(static_cast<T>(1)-q*(u))));
-            octonion  <T> d = static_cast<T>(1)-q*(u), c = (static_cast<T>(1)+q*(u))/d, r = -u/static_cast<T>(2)*log(c);
+            // atan(q) = 1/(2UVq) log( (1-q UVq)^{-1} (1+q UVq) )
+            //  = -UVq/2 log( (1-q UVq)^{-1} (1+q UVq) )
+            //return(-u/static_cast<T>(2)*log(static_cast<T>(1)/(static_cast<T>(1)-q*(u))*(static_cast<T>(1)+q*(u))));
+            octonion  <T> d = static_cast<T>(1)-q*(u), c = static_cast<T>(1)/d*(static_cast<T>(1)+q*(u)), r = -u/static_cast<T>(2)*log(c);
             //return((abs(d) != static_cast<T>(0) && abs(c) != static_cast<T>(0)) ? r : octonion  <T>(0));
             return((abs(d) != static_cast<T>(0) && abs(c) != static_cast<T>(0)) ? ((abs(unreal(q)) != static_cast<T>(0)) ? r : octonion  <T>(real(r))) : octonion  <T>(0));
             // the signs of realpart are different with complex ones when Sq == 0 && Vq < -1
 #else
-            // atan(q) = -UVq atanh(UVq.q)
-            return(static_cast<T>(1)/u*atanh(u*q)); // the signs of realpart are different with complex ones when Sq == 0 && Vq < -1
+            // atan(q) = -UVq atanh(q UVq)
+            return(static_cast<T>(1)/u*atanh(q*u)); // the signs of realpart are different with complex ones when Sq == 0 && Vq < -1
 #endif
         }
         
--- ./boost/math/quaternion.hpp~	2011-05-20 16:35:53.000000000 +0900
+++ ./boost/math/quaternion.hpp	2011-08-01 22:06:15.000000000 +0900
@@ -1991,9 +1991,9 @@
             quaternion<T> r = -u*log(q*(u) + sqrt(static_cast<T>(1) - pow(q, 2)));
             return(r.real() + r.unreal()*static_cast<T>((abs(unreal(q)) != static_cast<T>(0) || real(q) < 0) ? 1 : -1));
 #else
-            // asin(z) = 1/UVq asinh(UVq z)
-            //return(static_cast<T>(1)/u*asinh(u*q)); // the signs of imagpart are different with complex ones when |Vq| == 0 && Sq > 0
-            quaternion<T> r = static_cast<T>(1)/u*asinh(u*q);
+            // asin(q) = 1/UVq asinh(q UVq)
+            //return(static_cast<T>(1)/u*asinh(q*u)); // the signs of imagpart are different with complex ones when |Vq| == 0 && Sq > 0
+            quaternion<T> r = static_cast<T>(1)/u*asinh(q*u);
             return(r.real() + r.unreal()*static_cast<T>((abs(unreal(q)) != static_cast<T>(0) || real(q) < 0) ? 1 : -1));
 #endif
         }
@@ -2010,16 +2010,16 @@
                                      (q.R_component_4()==static_cast<T>(0)) ? 0 : q.R_component_4()*inf));
             quaternion<T> u = (abs(unreal(q)) != static_cast<T>(0)) ? unreal(q)/abs(unreal(q)) : quaternion<T>(0, 1, 0, 0);
 #if 1
-            // atan(q) = 1/(2UVq) log( (1+q UVq)/(1-q UVq) )
-            //  = -UVq/2 log( (1+q UVq)/(1-q UVq) )
-            //return(-u/static_cast<T>(2)*log((static_cast<T>(1)+q*(u))/(static_cast<T>(1)-q*(u))));
-            quaternion<T> d = static_cast<T>(1)-q*(u), c = (static_cast<T>(1)+q*(u))/d, r = -u/static_cast<T>(2)*log(c);
+            // atan(q) = 1/(2UVq) log( (1-q UVq)^{-1} (1+q UVq) )
+            //  = -UVq/2 log( (1-q UVq)^{-1} (1+q UVq) )
+            //return(-u/static_cast<T>(2)*log(static_cast<T>(1)/(static_cast<T>(1)-q*(u))*(static_cast<T>(1)+q*(u))));
+            quaternion<T> d = static_cast<T>(1)-q*(u), c = static_cast<T>(1)/d*(static_cast<T>(1)+q*(u)), r = -u/static_cast<T>(2)*log(c);
             //return((abs(d) != static_cast<T>(0) && abs(c) != static_cast<T>(0)) ? r : quaternion<T>(0));
             return((abs(d) != static_cast<T>(0) && abs(c) != static_cast<T>(0)) ? ((abs(unreal(q)) != static_cast<T>(0)) ? r : quaternion<T>(real(r))) : quaternion<T>(0));
             // the signs of realpart are different with complex ones when Sq == 0 && Vq < -1
 #else
-            // atan(q) = -UVq atanh(UVq.q)
-            return(static_cast<T>(1)/u*atanh(u*q)); // the signs of realpart are different with complex ones when Sq == 0 && Vq < -1
+            // atan(q) = -UVq atanh(q UVq)
+            return(static_cast<T>(1)/u*atanh(q*u)); // the signs of realpart are different with complex ones when Sq == 0 && Vq < -1
 #endif
         }
         
