From 37a899a9691282f21a5a035da865606d986782a2 Mon Sep 17 00:00:00 2001 From: prill Date: Wed, 17 Jan 2007 07:20:02 +0000 Subject: [PATCH] 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 --- deal.II/base/source/quadrature_lib.cc | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) 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: -- 2.39.5