aboutsummaryrefslogtreecommitdiffhomepage
path: root/unsupported
diff options
context:
space:
mode:
authorGravatar Benoit Jacob <jacob.benoit.1@gmail.com>2010-04-28 18:51:38 -0400
committerGravatar Benoit Jacob <jacob.benoit.1@gmail.com>2010-04-28 18:51:38 -0400
commite2775869588e1df2d19265eac5c167651168a414 (patch)
tree8ca0d2fdbc1f8945405fb3fd99c5634b60f3189f /unsupported
parent4f83d6ad1959f3c76cd5eb328ec65ced4ca4f339 (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/AdolcForward6
-rw-r--r--unsupported/Eigen/src/AutoDiff/AutoDiffScalar.h13
-rw-r--r--unsupported/Eigen/src/Polynomials/PolynomialSolver.h8
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: