return    approx_equal(M[1], M[3], maxelem * tolerance) && approx_equal(M[2], M[6], maxelem * tolerance) && approx_equal(M[5], M[7], maxelem * tolerance);
return    approx_equal_scaled(M[1], M[3], maxelem * tolerance) && approx_equal_scaled(M[2], M[6], maxelem * tolerance) && approx_equal_scaled(M[5], M[7], maxelem * tolerance);
  bool isSymmetric(const Mx33& M, double tolerance = 1.e-6)  {    double maxelem = M[0];    for(int i=1;i<9;i++) if (maxelem < M[i]) maxelem = M[i];    return    approx_equal(M[1], M[3], maxelem * tolerance)           && approx_equal(M[2], M[6], maxelem * tolerance)           && approx_equal(M[5], M[7], maxelem * tolerance);  }