diff options
author | Benoit Jacob <jacob.benoit.1@gmail.com> | 2010-04-28 18:51:38 -0400 |
---|---|---|
committer | Benoit Jacob <jacob.benoit.1@gmail.com> | 2010-04-28 18:51:38 -0400 |
commit | e2775869588e1df2d19265eac5c167651168a414 (patch) | |
tree | 8ca0d2fdbc1f8945405fb3fd99c5634b60f3189f /unsupported | |
parent | 4f83d6ad1959f3c76cd5eb328ec65ced4ca4f339 (diff) |
Complete rework of global math functions and NumTraits.
* Now completely generic so all standard integer types (like char...) are supported.
** add unit test for that (integer_types).
* NumTraits does no longer inherit numeric_limits
* All math functions are now templated
* Better guard (static asserts) against using certain math functions on integer types.
Diffstat (limited to 'unsupported')
-rw-r--r-- | unsupported/Eigen/AdolcForward | 6 | ||||
-rw-r--r-- | unsupported/Eigen/src/AutoDiff/AutoDiffScalar.h | 13 | ||||
-rw-r--r-- | unsupported/Eigen/src/Polynomials/PolynomialSolver.h | 8 |
3 files changed, 10 insertions, 17 deletions
diff --git a/unsupported/Eigen/AdolcForward b/unsupported/Eigen/AdolcForward index 70aa47815..8f1a00d20 100644 --- a/unsupported/Eigen/AdolcForward +++ b/unsupported/Eigen/AdolcForward @@ -103,10 +103,12 @@ namespace Eigen { template<> struct NumTraits<adtl::adouble> { typedef adtl::adouble Real; - typedef adtl::adouble FloatingPoint; + typedef adtl::adouble NonInteger; + typedef adtl::adouble Nested; enum { IsComplex = 0, - HasFloatingPoint = 1, + IsInteger = 0, + IsSigned = 1, ReadCost = 1, AddCost = 1, MulCost = 1 diff --git a/unsupported/Eigen/src/AutoDiff/AutoDiffScalar.h b/unsupported/Eigen/src/AutoDiff/AutoDiffScalar.h index 4b7331035..35db65ff0 100644 --- a/unsupported/Eigen/src/AutoDiff/AutoDiffScalar.h +++ b/unsupported/Eigen/src/AutoDiff/AutoDiffScalar.h @@ -552,19 +552,10 @@ ei_pow(const AutoDiffScalar<DerType>& x, typename ei_traits<DerType>::Scalar y) #undef EIGEN_AUTODIFF_DECLARE_GLOBAL_UNARY template<typename DerType> struct NumTraits<AutoDiffScalar<DerType> > + : NumTraits< typename NumTraits<typename DerType::Scalar>::Real > { - typedef typename NumTraits<typename DerType::Scalar>::Real Real; - typedef AutoDiffScalar<DerType> FloatingPoint; + typedef AutoDiffScalar<DerType> NonInteger; typedef AutoDiffScalar<DerType>& Nested; - enum { - IsComplex = 0, - HasFloatingPoint = 1, - ReadCost = 1, - AddCost = 1, - MulCost = 1 - }; - inline static Real epsilon() { return std::numeric_limits<Real>::epsilon(); } - inline static Real dummy_precision() { return NumTraits<Real>::dummy_precision(); } }; } diff --git a/unsupported/Eigen/src/Polynomials/PolynomialSolver.h b/unsupported/Eigen/src/Polynomials/PolynomialSolver.h index 49a5ffffa..207836508 100644 --- a/unsupported/Eigen/src/Polynomials/PolynomialSolver.h +++ b/unsupported/Eigen/src/Polynomials/PolynomialSolver.h @@ -131,7 +131,7 @@ class PolynomialSolverBase { hasArealRoot = false; int res=0; - RealScalar abs2; + RealScalar abs2(0); for( int i=0; i<m_roots.size(); ++i ) { @@ -159,7 +159,7 @@ class PolynomialSolverBase res = i; } } } - return m_roots[res].real(); + return ei_real_ref(m_roots[res]); } @@ -171,7 +171,7 @@ class PolynomialSolverBase { hasArealRoot = false; int res=0; - RealScalar val; + RealScalar val(0); for( int i=0; i<m_roots.size(); ++i ) { @@ -199,7 +199,7 @@ class PolynomialSolverBase res = i; } } } - return m_roots[res].real(); + return ei_real_ref(m_roots[res]); } public: |