mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-08-14 04:35:57 +08:00
Fix EIGEN_INITIALIZE_MATRICES_BY_NAN.
This commit is contained in:
parent
7fe6419171
commit
74438f8aa9
@ -12,10 +12,13 @@
|
|||||||
#define EIGEN_DENSESTORAGEBASE_H
|
#define EIGEN_DENSESTORAGEBASE_H
|
||||||
|
|
||||||
#if defined(EIGEN_INITIALIZE_MATRICES_BY_ZERO)
|
#if defined(EIGEN_INITIALIZE_MATRICES_BY_ZERO)
|
||||||
|
# define EIGEN_INITIALIZE_COEFFS
|
||||||
# define EIGEN_INITIALIZE_COEFFS_IF_THAT_OPTION_IS_ENABLED for(int i=0;i<base().size();++i) coeffRef(i)=Scalar(0);
|
# define EIGEN_INITIALIZE_COEFFS_IF_THAT_OPTION_IS_ENABLED for(int i=0;i<base().size();++i) coeffRef(i)=Scalar(0);
|
||||||
#elif defined(EIGEN_INITIALIZE_MATRICES_BY_NAN)
|
#elif defined(EIGEN_INITIALIZE_MATRICES_BY_NAN)
|
||||||
|
# define EIGEN_INITIALIZE_COEFFS
|
||||||
# define EIGEN_INITIALIZE_COEFFS_IF_THAT_OPTION_IS_ENABLED for(int i=0;i<base().size();++i) coeffRef(i)=std::numeric_limits<Scalar>::quiet_NaN();
|
# define EIGEN_INITIALIZE_COEFFS_IF_THAT_OPTION_IS_ENABLED for(int i=0;i<base().size();++i) coeffRef(i)=std::numeric_limits<Scalar>::quiet_NaN();
|
||||||
#else
|
#else
|
||||||
|
# undef EIGEN_INITIALIZE_COEFFS
|
||||||
# define EIGEN_INITIALIZE_COEFFS_IF_THAT_OPTION_IS_ENABLED
|
# define EIGEN_INITIALIZE_COEFFS_IF_THAT_OPTION_IS_ENABLED
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -234,7 +237,7 @@ class PlainObjectBase : public internal::dense_xpr_base<Derived>::type
|
|||||||
&& EIGEN_IMPLIES(ColsAtCompileTime==Dynamic && MaxColsAtCompileTime!=Dynamic,nbCols<=MaxColsAtCompileTime)
|
&& EIGEN_IMPLIES(ColsAtCompileTime==Dynamic && MaxColsAtCompileTime!=Dynamic,nbCols<=MaxColsAtCompileTime)
|
||||||
&& nbRows>=0 && nbCols>=0 && "Invalid sizes when resizing a matrix or array.");
|
&& nbRows>=0 && nbCols>=0 && "Invalid sizes when resizing a matrix or array.");
|
||||||
internal::check_rows_cols_for_overflow<MaxSizeAtCompileTime>::run(nbRows, nbCols);
|
internal::check_rows_cols_for_overflow<MaxSizeAtCompileTime>::run(nbRows, nbCols);
|
||||||
#ifdef EIGEN_INITIALIZE_MATRICES_BY_ZERO
|
#ifdef EIGEN_INITIALIZE_COEFFS
|
||||||
Index size = nbRows*nbCols;
|
Index size = nbRows*nbCols;
|
||||||
bool size_changed = size != this->size();
|
bool size_changed = size != this->size();
|
||||||
m_storage.resize(size, nbRows, nbCols);
|
m_storage.resize(size, nbRows, nbCols);
|
||||||
@ -260,14 +263,14 @@ class PlainObjectBase : public internal::dense_xpr_base<Derived>::type
|
|||||||
{
|
{
|
||||||
EIGEN_STATIC_ASSERT_VECTOR_ONLY(PlainObjectBase)
|
EIGEN_STATIC_ASSERT_VECTOR_ONLY(PlainObjectBase)
|
||||||
eigen_assert(((SizeAtCompileTime == Dynamic && (MaxSizeAtCompileTime==Dynamic || size<=MaxSizeAtCompileTime)) || SizeAtCompileTime == size) && size>=0);
|
eigen_assert(((SizeAtCompileTime == Dynamic && (MaxSizeAtCompileTime==Dynamic || size<=MaxSizeAtCompileTime)) || SizeAtCompileTime == size) && size>=0);
|
||||||
#ifdef EIGEN_INITIALIZE_MATRICES_BY_ZERO
|
#ifdef EIGEN_INITIALIZE_COEFFS
|
||||||
bool size_changed = size != this->size();
|
bool size_changed = size != this->size();
|
||||||
#endif
|
#endif
|
||||||
if(RowsAtCompileTime == 1)
|
if(RowsAtCompileTime == 1)
|
||||||
m_storage.resize(size, 1, size);
|
m_storage.resize(size, 1, size);
|
||||||
else
|
else
|
||||||
m_storage.resize(size, size, 1);
|
m_storage.resize(size, size, 1);
|
||||||
#ifdef EIGEN_INITIALIZE_MATRICES_BY_ZERO
|
#ifdef EIGEN_INITIALIZE_COEFFS
|
||||||
if(size_changed) EIGEN_INITIALIZE_COEFFS_IF_THAT_OPTION_IS_ENABLED
|
if(size_changed) EIGEN_INITIALIZE_COEFFS_IF_THAT_OPTION_IS_ENABLED
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user