28 #include <arprec/mp_real.h> 
   35   void dft1(T* output_data, 
const T* input_data, 
const int_t size, 
bool inverse)
 
   37     T pi2 = (inverse) ? 2.0 * M_PI : -2.0 * M_PI;
 
   40     for(int_t y = 0; y < size; y++) {
 
   41       output_data[2*y] = 0.;
 
   42       output_data[2*y+1] = 0.;
 
   43       for(int_t x = 0; x < size; x++) {
 
   44    a = pi2 * y * x * invs;
 
   47    output_data[2*y]   += input_data[2*x] * ca - input_data[2*x+1] * sa;
 
   48    output_data[2*y+1] += input_data[2*x] * sa + input_data[2*x+1] * ca;
 
   51    output_data[2*y]   *= invs;
 
   52    output_data[2*y+1] *= invs;
 
   65   DFT_wrapper(
const double* data, int_t n) : size(n)
 
   69   DFT_wrapper(
const std::complex<double>* data, int_t n) : size(n)
 
   76     delete [] output_data;
 
   79   T* getdata()
 const { 
return output_data; }
 
   82   void init(
const Tp* data, int_t n)
 
   84     input_data = 
new T [n*2];
 
   85     output_data = 
new T [n*2];
 
   87     for (int_t i=0; i < n*2; ++i) {
 
   88        input_data[i] = data[i];
 
   92   void init(
const std::complex<Tp>* data, int_t n)
 
   94     input_data = 
new T [n*2];
 
   95     output_data = 
new T [n*2];
 
   97     for (int_t i=0; i < n; ++i) {
 
   98        input_data[2*i] = data[i].real();
 
   99        input_data[2*i+1] = data[i].imag();
 
  105     dft1(output_data, input_data, size, 
false);
 
  111     for (int_t i=0; i<size*2; ++i) 
 
  112       data[i] -= output_data[i];
 
  115   void diff(std::complex<Tp>* data)
 
  117     for (int_t i=0; i<size; ++i) {
 
  120      data[i] -= std::complex<Tp>(output_data[2*i], output_data[2*i+1]);
 
  136   typedef T value_type;
 
  138   FFTW_wrapper(
const double* data, int_t n) : size(n)
 
  148   void init(
const double* data, int_t n)
 
  150     in = (T*)fftw_malloc(
sizeof(T)*n);
 
  151     out = (T*)fftw_malloc(
sizeof(T)*n);
 
  153     for (int_t i=0; i < n; ++i) {
 
  154        in[i][0] = data[2*i];
 
  155        in[i][1] = data[2*i+1];
 
  161     plan = fftw_plan_dft_1d(size, in, out, FFTW_FORWARD, FFTW_ESTIMATE);
 
  165   template<
typename OtherType>
 
  166   void diff(OtherType* data)
 
  168     for (int_t i=0; i<size; ++i) {
 
  169       data[2*i]   -= out[i][0];
 
  170       data[2*i+1] -= out[i][1];
 
  184   Arprec_wrapper(
const T* data, int_t n) : size(n)
 
  194   T* getdata()
 const { 
return in; }
 
  196   void init(
const T* data, int_t n)
 
  202      m2 = (m - (m + 1) / 2);
 
  204      y = 
new T [(n + n1 * mp::mpnsp1) * 2];
 
  213      for (int_t i=0; i < 2*n; ++i) {
 
  220     mp_real::mpfft1(-1, m, m1, m2, in, y);
 
  230     for (int_t i=0; i<2*size; ++i) {