diff options
author | 2009-08-14 15:12:32 -0400 | |
---|---|---|
committer | 2009-08-14 15:12:32 -0400 | |
commit | 22ae236d4ea404122ff68966f1572a236f239335 (patch) | |
tree | a2b0d3e336426ddc8665968722d5ff895190730b /Eigen/src/Core/MathFunctions.h | |
parent | 6373c3cd0014ad8e0a6952915c3c6342b57c1863 (diff) |
machine_epsilon -> epsilon as wrapper around numeric_traits
Diffstat (limited to 'Eigen/src/Core/MathFunctions.h')
-rw-r--r-- | Eigen/src/Core/MathFunctions.h | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/Eigen/src/Core/MathFunctions.h b/Eigen/src/Core/MathFunctions.h index d68c483b2..16091caf0 100644 --- a/Eigen/src/Core/MathFunctions.h +++ b/Eigen/src/Core/MathFunctions.h @@ -1,7 +1,7 @@ // This file is part of Eigen, a lightweight C++ template library // for linear algebra. // -// Copyright (C) 2006-2008 Benoit Jacob <jacob.benoit.1@gmail.com> +// Copyright (C) 2006-2009 Benoit Jacob <jacob.benoit.1@gmail.com> // // Eigen is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public @@ -25,8 +25,13 @@ #ifndef EIGEN_MATHFUNCTIONS_H #define EIGEN_MATHFUNCTIONS_H +template<typename T> typename NumTraits<T>::Real epsilon() +{ + return std::numeric_limits<typename NumTraits<T>::Real>::epsilon(); +} + template<typename T> inline typename NumTraits<T>::Real precision(); -template<typename T> inline typename NumTraits<T>::Real machine_epsilon(); + template<typename T> inline T ei_random(T a, T b); template<typename T> inline T ei_random(); template<typename T> inline T ei_random_amplitude() @@ -51,7 +56,6 @@ template<typename T> inline typename NumTraits<T>::Real ei_hypot(T x, T y) **************/ template<> inline int precision<int>() { return 0; } -template<> inline int machine_epsilon<int>() { return 0; } inline int ei_real(int x) { return x; } inline int& ei_real_ref(int& x) { return x; } inline int ei_imag(int) { return 0; } @@ -106,7 +110,6 @@ inline bool ei_isApproxOrLessThan(int a, int b, int = precision<int>()) **************/ template<> inline float precision<float>() { return 1e-5f; } -template<> inline float machine_epsilon<float>() { return 1.192e-07f; } inline float ei_real(float x) { return x; } inline float& ei_real_ref(float& x) { return x; } inline float ei_imag(float) { return 0.f; } @@ -154,7 +157,6 @@ inline bool ei_isApproxOrLessThan(float a, float b, float prec = precision<float **************/ template<> inline double precision<double>() { return 1e-12; } -template<> inline double machine_epsilon<double>() { return 2.220e-16; } inline double ei_real(double x) { return x; } inline double& ei_real_ref(double& x) { return x; } @@ -203,7 +205,6 @@ inline bool ei_isApproxOrLessThan(double a, double b, double prec = precision<do *********************/ template<> inline float precision<std::complex<float> >() { return precision<float>(); } -template<> inline float machine_epsilon<std::complex<float> >() { return machine_epsilon<float>(); } inline float ei_real(const std::complex<float>& x) { return std::real(x); } inline float ei_imag(const std::complex<float>& x) { return std::imag(x); } inline float& ei_real_ref(std::complex<float>& x) { return reinterpret_cast<float*>(&x)[0]; } @@ -240,7 +241,6 @@ inline bool ei_isApprox(const std::complex<float>& a, const std::complex<float>& **********************/ template<> inline double precision<std::complex<double> >() { return precision<double>(); } -template<> inline double machine_epsilon<std::complex<double> >() { return machine_epsilon<double>(); } inline double ei_real(const std::complex<double>& x) { return std::real(x); } inline double ei_imag(const std::complex<double>& x) { return std::imag(x); } inline double& ei_real_ref(std::complex<double>& x) { return reinterpret_cast<double*>(&x)[0]; } @@ -278,7 +278,6 @@ inline bool ei_isApprox(const std::complex<double>& a, const std::complex<double ******************/ template<> inline long double precision<long double>() { return precision<double>(); } -template<> inline long double machine_epsilon<long double>() { return 1.084e-19l; } inline long double ei_real(long double x) { return x; } inline long double& ei_real_ref(long double& x) { return x; } inline long double ei_imag(long double) { return 0.; } |