fix a numerical instability in Quaternion::slerp
diff --git a/Eigen/src/Geometry/Quaternion.h b/Eigen/src/Geometry/Quaternion.h
index 876524c..97add91 100644
--- a/Eigen/src/Geometry/Quaternion.h
+++ b/Eigen/src/Geometry/Quaternion.h
@@ -369,13 +369,14 @@
   // 2 - Quaternion slerp(Scalar t, const Quaternion& other) const
   //     which returns the s-lerp between this and other
   // ??
-  if (m_coeffs == other.m_coeffs)
+  static const Scalar one = Scalar(1) - precision<Scalar>();
+  Scalar d = m_coeffs.dot(other.m_coeffs);
+  Scalar absD = ei_abs(d);
+  if (d>=one)
     return *this;
 
-  Scalar d = m_coeffs.dot(other.m_coeffs);
-
   // theta is the angle between the 2 quaternions
-  Scalar theta = std::acos(ei_abs(d));
+  Scalar theta = std::acos(absD);
   Scalar sinTheta = ei_sin(theta);
 
   Scalar scale0 = ei_sin( ( Scalar(1) - t ) * theta) / sinTheta;