aboutsummaryrefslogtreecommitdiffhomepage
path: root/Eigen/src/Core/StableNorm.h
diff options
context:
space:
mode:
authorGravatar Gael Guennebaud <g.gael@free.fr>2015-06-23 10:10:17 +0200
committerGravatar Gael Guennebaud <g.gael@free.fr>2015-06-23 10:10:17 +0200
commit307c4fc2922d950b90ee86387afa5de77f670349 (patch)
treef4bd85f47fb405b98a47efa19261fc9a76760108 /Eigen/src/Core/StableNorm.h
parentbb3a9b4941ad45704b6929453d5210e3d7be26cc (diff)
Workaround missalignment produced by first_aligned for PacketSize==1 and size==1
Diffstat (limited to 'Eigen/src/Core/StableNorm.h')
-rw-r--r--Eigen/src/Core/StableNorm.h5
1 files changed, 5 insertions, 0 deletions
diff --git a/Eigen/src/Core/StableNorm.h b/Eigen/src/Core/StableNorm.h
index f702fd8e2..f9cd01b7e 100644
--- a/Eigen/src/Core/StableNorm.h
+++ b/Eigen/src/Core/StableNorm.h
@@ -157,6 +157,7 @@ inline typename NumTraits<typename internal::traits<Derived>::Scalar>::Real
MatrixBase<Derived>::stableNorm() const
{
using std::sqrt;
+ using std::abs;
const Index blockSize = 4096;
RealScalar scale(0);
RealScalar invScale(1);
@@ -167,6 +168,10 @@ MatrixBase<Derived>::stableNorm() const
typedef typename internal::conditional<Alignment, Ref<const Matrix<Scalar,Dynamic,1,0,blockSize,1>, Aligned>,
typename Base::ConstSegmentReturnType>::type SegmentWrapper;
Index n = size();
+
+ if(n==1)
+ return abs(this->coeff(0));
+
Index bi = internal::first_aligned(derived());
if (bi>0)
internal::stable_norm_kernel(this->head(bi), ssq, scale, invScale);