mirror of
https://gitlab.com/libeigen/eigen.git
synced 2026-04-10 11:34:33 +08:00
Clang-format tests, examples, libraries, benchmarks, etc.
This commit is contained in:
committed by
Rasmus Munk Larsen
parent
3252ecc7a4
commit
46e9cdb7fe
@@ -1,5 +1,5 @@
|
||||
// To use the simple FFT implementation
|
||||
// g++ -o demofft -I.. -Wall -O3 FFT.cpp
|
||||
// g++ -o demofft -I.. -Wall -O3 FFT.cpp
|
||||
|
||||
// To use the FFTW implementation
|
||||
// g++ -o demofft -I.. -DUSE_FFTW -Wall -O3 FFT.cpp -lfftw3 -lfftw3f -lfftw3l
|
||||
@@ -20,99 +20,84 @@ using namespace std;
|
||||
using namespace Eigen;
|
||||
|
||||
template <typename T>
|
||||
T mag2(T a)
|
||||
{
|
||||
return a*a;
|
||||
T mag2(T a) {
|
||||
return a * a;
|
||||
}
|
||||
template <typename T>
|
||||
T mag2(std::complex<T> a)
|
||||
{
|
||||
return norm(a);
|
||||
T mag2(std::complex<T> a) {
|
||||
return norm(a);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
T mag2(const std::vector<T> & vec)
|
||||
{
|
||||
T out=0;
|
||||
for (size_t k=0;k<vec.size();++k)
|
||||
out += mag2(vec[k]);
|
||||
return out;
|
||||
T mag2(const std::vector<T>& vec) {
|
||||
T out = 0;
|
||||
for (size_t k = 0; k < vec.size(); ++k) out += mag2(vec[k]);
|
||||
return out;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
T mag2(const std::vector<std::complex<T> > & vec)
|
||||
{
|
||||
T out=0;
|
||||
for (size_t k=0;k<vec.size();++k)
|
||||
out += mag2(vec[k]);
|
||||
return out;
|
||||
T mag2(const std::vector<std::complex<T> >& vec) {
|
||||
T out = 0;
|
||||
for (size_t k = 0; k < vec.size(); ++k) out += mag2(vec[k]);
|
||||
return out;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
vector<T> operator-(const vector<T> & a,const vector<T> & b )
|
||||
{
|
||||
vector<T> c(a);
|
||||
for (size_t k=0;k<b.size();++k)
|
||||
c[k] -= b[k];
|
||||
return c;
|
||||
vector<T> operator-(const vector<T>& a, const vector<T>& b) {
|
||||
vector<T> c(a);
|
||||
for (size_t k = 0; k < b.size(); ++k) c[k] -= b[k];
|
||||
return c;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
void RandomFill(std::vector<T> & vec)
|
||||
{
|
||||
for (size_t k=0;k<vec.size();++k)
|
||||
vec[k] = T( rand() )/T(RAND_MAX) - T(.5);
|
||||
void RandomFill(std::vector<T>& vec) {
|
||||
for (size_t k = 0; k < vec.size(); ++k) vec[k] = T(rand()) / T(RAND_MAX) - T(.5);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
void RandomFill(std::vector<std::complex<T> > & vec)
|
||||
{
|
||||
for (size_t k=0;k<vec.size();++k)
|
||||
vec[k] = std::complex<T> ( T( rand() )/T(RAND_MAX) - T(.5), T( rand() )/T(RAND_MAX) - T(.5));
|
||||
void RandomFill(std::vector<std::complex<T> >& vec) {
|
||||
for (size_t k = 0; k < vec.size(); ++k)
|
||||
vec[k] = std::complex<T>(T(rand()) / T(RAND_MAX) - T(.5), T(rand()) / T(RAND_MAX) - T(.5));
|
||||
}
|
||||
|
||||
template <typename T_time,typename T_freq>
|
||||
void fwd_inv(size_t nfft)
|
||||
{
|
||||
typedef typename NumTraits<T_freq>::Real Scalar;
|
||||
vector<T_time> timebuf(nfft);
|
||||
RandomFill(timebuf);
|
||||
template <typename T_time, typename T_freq>
|
||||
void fwd_inv(size_t nfft) {
|
||||
typedef typename NumTraits<T_freq>::Real Scalar;
|
||||
vector<T_time> timebuf(nfft);
|
||||
RandomFill(timebuf);
|
||||
|
||||
vector<T_freq> freqbuf;
|
||||
static FFT<Scalar> fft;
|
||||
fft.fwd(freqbuf,timebuf);
|
||||
vector<T_freq> freqbuf;
|
||||
static FFT<Scalar> fft;
|
||||
fft.fwd(freqbuf, timebuf);
|
||||
|
||||
vector<T_time> timebuf2;
|
||||
fft.inv(timebuf2,freqbuf);
|
||||
vector<T_time> timebuf2;
|
||||
fft.inv(timebuf2, freqbuf);
|
||||
|
||||
T_time rmse = mag2(timebuf - timebuf2) / mag2(timebuf);
|
||||
cout << "roundtrip rmse: " << rmse << endl;
|
||||
T_time rmse = mag2(timebuf - timebuf2) / mag2(timebuf);
|
||||
cout << "roundtrip rmse: " << rmse << endl;
|
||||
}
|
||||
|
||||
template <typename T_scalar>
|
||||
void two_demos(int nfft)
|
||||
{
|
||||
cout << " scalar ";
|
||||
fwd_inv<T_scalar,std::complex<T_scalar> >(nfft);
|
||||
cout << " complex ";
|
||||
fwd_inv<std::complex<T_scalar>,std::complex<T_scalar> >(nfft);
|
||||
void two_demos(int nfft) {
|
||||
cout << " scalar ";
|
||||
fwd_inv<T_scalar, std::complex<T_scalar> >(nfft);
|
||||
cout << " complex ";
|
||||
fwd_inv<std::complex<T_scalar>, std::complex<T_scalar> >(nfft);
|
||||
}
|
||||
|
||||
void demo_all_types(int nfft)
|
||||
{
|
||||
cout << "nfft=" << nfft << endl;
|
||||
cout << " float" << endl;
|
||||
two_demos<float>(nfft);
|
||||
cout << " double" << endl;
|
||||
two_demos<double>(nfft);
|
||||
cout << " long double" << endl;
|
||||
two_demos<long double>(nfft);
|
||||
void demo_all_types(int nfft) {
|
||||
cout << "nfft=" << nfft << endl;
|
||||
cout << " float" << endl;
|
||||
two_demos<float>(nfft);
|
||||
cout << " double" << endl;
|
||||
two_demos<double>(nfft);
|
||||
cout << " long double" << endl;
|
||||
two_demos<long double>(nfft);
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
demo_all_types( 2*3*4*5*7 );
|
||||
demo_all_types( 2*9*16*25 );
|
||||
demo_all_types( 1024 );
|
||||
return 0;
|
||||
int main() {
|
||||
demo_all_types(2 * 3 * 4 * 5 * 7);
|
||||
demo_all_types(2 * 9 * 16 * 25);
|
||||
demo_all_types(1024);
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user