diff --git a/test/nullary.cpp b/test/nullary.cpp index 240365529..3adfc33fe 100644 --- a/test/nullary.cpp +++ b/test/nullary.cpp @@ -50,8 +50,8 @@ template void testVectorType(const VectorType& base) { typedef typename ei_traits::Scalar Scalar; - Scalar low = ei_random(-500,500); - Scalar high = ei_random(-500,500); + Scalar low = ei_random(-500,500); + Scalar high = ei_random(-500,500); if (low>high) std::swap(low,high); const int size = base.size(); const Scalar step = (high-low)/(size-1); diff --git a/test/redux.cpp b/test/redux.cpp index 511df1d22..2dc4dcc45 100644 --- a/test/redux.cpp +++ b/test/redux.cpp @@ -27,6 +27,7 @@ template void matrixRedux(const MatrixType& m) { typedef typename MatrixType::Scalar Scalar; + typedef typename MatrixType::RealScalar RealScalar; int rows = m.rows(); int cols = m.cols(); @@ -44,7 +45,7 @@ template void matrixRedux(const MatrixType& m) minc = std::min(ei_real(minc), ei_real(m1(i,j))); maxc = std::max(ei_real(maxc), ei_real(m1(i,j))); } - const Scalar mean = s/Scalar(rows*cols); + const Scalar mean = s/Scalar(RealScalar(rows*cols)); VERIFY_IS_APPROX(m1.sum(), s); VERIFY_IS_APPROX(m1.mean(), mean); diff --git a/unsupported/Eigen/FFT b/unsupported/Eigen/FFT index 8702120de..0cc10bafb 100644 --- a/unsupported/Eigen/FFT +++ b/unsupported/Eigen/FFT @@ -187,7 +187,7 @@ class FFT { m_impl.inv( dst,src,nfft ); if ( HasFlag( Unscaled ) == false) - scale(dst,1./nfft,nfft); + scale(dst,_Scalar(1./nfft),nfft); } inline @@ -237,8 +237,14 @@ class FFT private: template - inline - void scale(_It x,_Val s,int nx) + inline void scale(_It x,_Val s,int nx) + { + for (int k=0;k + inline void scale(std::complex<_Val>* x,_Val s,int nx) { for (int k=0;k::compute(const MatrixType& A) { // TODO: Use that A is upper triangular m_Arows = A.rows(); - m_avgEival = A.trace() / Scalar(m_Arows); + m_avgEival = A.trace() / Scalar(RealScalar(m_Arows)); m_Ashifted = A - m_avgEival * MatrixType::Identity(m_Arows, m_Arows); computeMu(); MatrixType F = m_f(m_avgEival, 0) * MatrixType::Identity(m_Arows, m_Arows); @@ -94,7 +94,7 @@ MatrixType MatrixFunctionAtomic::compute(const MatrixType& A) for (int s = 1; s < 1.1 * m_Arows + 10; s++) { // upper limit is fairly arbitrary Fincr = m_f(m_avgEival, s) * P; F += Fincr; - P = (1/(s + 1.0)) * P * m_Ashifted; + P = Scalar(RealScalar(1.0/(s + 1))) * P * m_Ashifted; if (taylorConverged(s, F, Fincr, P)) { return F; } @@ -127,9 +127,9 @@ bool MatrixFunctionAtomic::taylorConverged(int s, const MatrixType& for (int r = 0; r < n; r++) { RealScalar mx = 0; for (int i = 0; i < n; i++) - mx = std::max(mx, std::abs(m_f(m_Ashifted(i, i) + m_avgEival, s+r))); - if (r != 0) - rfactorial *= r; + mx = std::max(mx, std::abs(m_f(m_Ashifted(i, i) + m_avgEival, s+r))); + if (r != 0) + rfactorial *= RealScalar(r); delta = std::max(delta, mx / rfactorial); } const RealScalar P_norm = P.cwiseAbs().rowwise().sum().maxCoeff(); diff --git a/unsupported/test/FFT.cpp b/unsupported/test/FFT.cpp index 056be2ef3..9c2682724 100644 --- a/unsupported/test/FFT.cpp +++ b/unsupported/test/FFT.cpp @@ -46,10 +46,10 @@ complex promote(long double x) { return complex( x); long double difpower=0; cerr <<"idx\ttruth\t\tvalue\t|dif|=\n"; long double pi = acos((long double)-1); - for (int k0=0;k0(fftbuf.size());++k0) { complex acc = 0; long double phinc = -2.*k0* pi / timebuf.size(); - for (int k1=0;k1(timebuf.size());++k1) { acc += promote( timebuf[k1] ) * exp( complex(0,k1*phinc) ); } totalpower += norm(acc); diff --git a/unsupported/test/matrix_function.cpp b/unsupported/test/matrix_function.cpp index 3e25c6a6f..446fa7ec3 100644 --- a/unsupported/test/matrix_function.cpp +++ b/unsupported/test/matrix_function.cpp @@ -33,14 +33,15 @@ template MatrixType createRandomMatrix(const int size) { typedef typename MatrixType::Scalar Scalar; + typedef typename MatrixType::RealScalar RealScalar; MatrixType result; if (ei_random(0,1) == 0) { result = MatrixType::Random(size, size); } else { MatrixType diag = MatrixType::Zero(size, size); for (int i = 0; i < size; ++i) { - diag(i, i) = static_cast(ei_random(0,2)) - + ei_random() * static_cast(0.01); + diag(i, i) = Scalar(RealScalar(ei_random(0,2))) + + ei_random() * Scalar(RealScalar(0.01)); } MatrixType A = MatrixType::Random(size, size); result = A.inverse() * diag * A;