From: Florian Prill Date: Wed, 17 Jan 2007 07:20:02 +0000 (+0000) Subject: Fixed tolerance in class QGaussLobatto to satisfy Mac OS X conditions. X-Git-Tag: v8.0.0~10662 X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e6556cacd2f235c4fc467965910a5397bfb037de;p=dealii.git Fixed tolerance in class QGaussLobatto to satisfy Mac OS X conditions. git-svn-id: https://svn.dealii.org/trunk@14326 0785d39b-7218-0410-832d-ea1e28bc413d --- diff --git a/deal.II/base/source/quadrature_lib.cc b/deal.II/base/source/quadrature_lib.cc index 541af2ceed..7e91805cea 100644 --- a/deal.II/base/source/quadrature_lib.cc +++ b/deal.II/base/source/quadrature_lib.cc @@ -184,15 +184,29 @@ compute_quadrature_points(const unsigned int q, // compute quadrature points with // a Newton algorithm. - // set tolerance + // Set tolerance. See class QGauss + // for detailed explanation. #ifdef HAVE_STD_NUMERIC_LIMITS const long double - epsilon = static_cast(std::numeric_limits::epsilon()); + long_double_eps = static_cast(std::numeric_limits::epsilon()), + double_eps = static_cast(std::numeric_limits::epsilon()); #else const long double - epsilon = 1.e-19L; + long_double_eps = 1.09-19L, + double_eps = 2.23-16; #endif + // check whether long double is + // more accurate than double, and + // set tolerances accordingly + const long double epsilon + = (static_cast(1.0) + long_double_eps != static_cast(1.0) + ? + std::max (double_eps / 100, long_double_eps * 5) + : + double_eps * 5 + ); + // we take the zeros of the Chebyshev // polynomial (alpha=beta=-0.5) as // initial values: