diff options
author | Gael Guennebaud <g.gael@free.fr> | 2012-11-06 15:25:50 +0100 |
---|---|---|
committer | Gael Guennebaud <g.gael@free.fr> | 2012-11-06 15:25:50 +0100 |
commit | a76fbbf39777827200455477a9e3557b6063913f (patch) | |
tree | 6a03f8fcb163fa2c3dc2267c52fd1204f5490309 /blas | |
parent | 959ef37006e60f68b9a9e667bf9da2e14eb0e8af (diff) |
Fix bug #314:
- remove most of the metaprogramming kung fu in MathFunctions.h (only keep functions that differs from the std)
- remove the overloads for array expression that were in the std namespace
Diffstat (limited to 'blas')
-rw-r--r-- | blas/level1_impl.h | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/blas/level1_impl.h b/blas/level1_impl.h index 95ea220af..c73f4d4f9 100644 --- a/blas/level1_impl.h +++ b/blas/level1_impl.h @@ -75,6 +75,9 @@ int EIGEN_CAT(EIGEN_CAT(i,SCALAR_SUFFIX),amin_)(int *n, RealScalar *px, int *inc int EIGEN_BLAS_FUNC(rotg)(RealScalar *pa, RealScalar *pb, RealScalar *pc, RealScalar *ps) { + using std::sqrt; + using std::abs; + Scalar& a = *reinterpret_cast<Scalar*>(pa); Scalar& b = *reinterpret_cast<Scalar*>(pb); RealScalar* c = pc; @@ -82,8 +85,8 @@ int EIGEN_BLAS_FUNC(rotg)(RealScalar *pa, RealScalar *pb, RealScalar *pc, RealSc #if !ISCOMPLEX Scalar r,z; - Scalar aa = internal::abs(a); - Scalar ab = internal::abs(b); + Scalar aa = abs(a); + Scalar ab = abs(b); if((aa+ab)==Scalar(0)) { *c = 1; @@ -93,7 +96,7 @@ int EIGEN_BLAS_FUNC(rotg)(RealScalar *pa, RealScalar *pb, RealScalar *pc, RealSc } else { - r = internal::sqrt(a*a + b*b); + r = sqrt(a*a + b*b); Scalar amax = aa>ab ? a : b; r = amax>0 ? r : -r; *c = a/r; @@ -108,7 +111,7 @@ int EIGEN_BLAS_FUNC(rotg)(RealScalar *pa, RealScalar *pb, RealScalar *pc, RealSc #else Scalar alpha; RealScalar norm,scale; - if(internal::abs(a)==RealScalar(0)) + if(abs(a)==RealScalar(0)) { *c = RealScalar(0); *s = Scalar(1); @@ -116,10 +119,10 @@ int EIGEN_BLAS_FUNC(rotg)(RealScalar *pa, RealScalar *pb, RealScalar *pc, RealSc } else { - scale = internal::abs(a) + internal::abs(b); - norm = scale*internal::sqrt((internal::abs2(a/scale))+ (internal::abs2(b/scale))); - alpha = a/internal::abs(a); - *c = internal::abs(a)/norm; + scale = abs(a) + abs(b); + norm = scale*sqrt((internal::abs2(a/scale))+ (internal::abs2(b/scale))); + alpha = a/abs(a); + *c = abs(a)/norm; *s = alpha*internal::conj(b)/norm; a = alpha*norm; } |