10#ifndef Tempus_NumericalUtils_hpp
11#define Tempus_NumericalUtils_hpp
13#include "Teuchos_ScalarTraits.hpp"
15#include "Tempus_config.hpp"
20template <
typename Scalar>
24 Teuchos::ScalarTraits<Scalar>::eps() *
25 typename Teuchos::ScalarTraits<Scalar>::magnitudeType(100.0);
30template <
typename Scalar>
32 Scalar tol = Teuchos::ScalarTraits<Scalar>::sfmin())
34 typedef Teuchos::ScalarTraits<Scalar> ST;
35 return ST::magnitude(value) <= ST::magnitude(tol);
39template <
typename Scalar>
42 return Teuchos::ScalarTraits<Scalar>::magnitude(a - b) < std::abs(absTol);
46template <
typename Scalar>
47bool approxEqual(Scalar a, Scalar b, Scalar relTol = numericalTol<Scalar>())
49 const Scalar min = std::min(std::abs(a), std::abs(b));
50 Scalar absTol = min * std::abs(relTol);
51 if (absTol == Scalar(0.0)) absTol = Teuchos::ScalarTraits<Scalar>::sfmin();
57template <
typename Scalar>
59 Scalar relTol = numericalTol<Scalar>())
bool approxEqual(Scalar a, Scalar b, Scalar relTol=numericalTol< Scalar >())
Test if values are approximately equal within the relative tolerance.
bool approxEqualScale(Scalar a, Scalar b, Scalar scale, Scalar relTol=numericalTol< Scalar >())
bool approxZero(Scalar value, Scalar tol=Teuchos::ScalarTraits< Scalar >::sfmin())
Test if value is approximately zero within tolerance.
bool approxEqualAbsTol(Scalar a, Scalar b, Scalar absTol)
Test if values are approximately equal within the absolute tolerance.
const Scalar numericalTol()
Numerical Tolerance (approx. max. significant digits minus two)