235      if (fabs(
p1 - 1.0) > epsilon) {
 
  237        const double q  = (
a00 + 
a11 + 
a22) / 3.0;
 
  239        const double p  = sqrt(p2 / 6.0);
 
  246        const double r   = B.getDeterminant() / 2.0;
 
  247        const double phi = (r < -1.0 ? PI / 3.0 : (r >  1.0 ? 0.0 : acos(r) / 3.0));
 
  249        eigenvalues[0] = q + 2*p*cos(phi);
 
  250        eigenvalues[2] = q + 2*p*cos(phi + 2*PI/3.0);
 
  251        eigenvalues[1] = 3 * q - eigenvalues[0] - eigenvalues[2];
 
  260      if (fabs(eigenvalues[0]) < fabs(eigenvalues[1])) {
 
  261        swap(eigenvalues[0], eigenvalues[1]);
 
  264      if (fabs(eigenvalues[1]) < fabs(eigenvalues[2])) {
 
  266        swap(eigenvalues[1], eigenvalues[2]);
 
  268        if (fabs(eigenvalues[0]) < fabs(eigenvalues[1])) {
 
  269          swap(eigenvalues[0], eigenvalues[1]);