[BACK]Return to dft.h CVS log [TXT][DIR] Up to [local] / OpenXM_contrib2 / asir2000 / fft

File: [local] / OpenXM_contrib2 / asir2000 / fft / dft.h (download)

Revision 1.1, Fri Dec 3 07:39:08 1999 UTC (24 years, 6 months ago) by noro
Branch: MAIN

Initial revision

/* $OpenXM: OpenXM_contrib2/asir2000/fft/dft.h,v 1.1 1999/12/03 07:39:08 noro Exp $ */
#if LONG_IS_32BIT
#if defined(VISUAL)
typedef unsigned _int64 UL;
#else
typedef unsigned long long UL;
#endif
#else
typedef unsigned long UL;
#endif

struct PrimesS {
	int	prime, primroot;
	int  bitwid, d;
};

#if USE_FLOAT
#define NPrimes 536
#else
#define NPrimes 13681
#endif

#if USE_FLOAT
typedef float ModNum;

#define AxBplusCmodP(ans,anstype,a,b,c,p,pinv) \
  { double _w_ = ((double)(a))*((double)(b))+((double)(c)), \
      _dp_ = (double)(p); \
      if ( _w_ >= _dp_ ) _w_ -= (_dp_*(double)((int)(_w_*(pinv)))); \
      ans = (anstype) (_w_>=_dp_?_w_-_dp_: _w_); }

#define AxBmodP(ans,anstype,a,b,p,pinv) \
  { double _w_ = ((double)(a))*((double)(b)), _dp_ = (double)(p); \
      _dp_ = (double)(p); \
      if ( _w_ >= _dp_ ) _w_ -= (_dp_*(double)((int)(_w_*(pinv)))); \
      ans = (anstype) (_w_>=_dp_?_w_-_dp_: _w_); }

#define AxBmodPnostrchk(ans,anstype,a,b,p,pinv) \
  { double _w_ = ((double)(a))*((double)(b)), _dp_ = (double)(p); \
      if ( _w_ >= _dp_ ) _w_ -= (_dp_*(double)((int)(_w_*(pinv)))); \
      ans = (anstype) _w_; }

#define AxBplusCmodPnostrchk(ans,anstype,a,b,c,p,pinv) \
  { double _w_ = ((double)(a))*((double)(b))+((double)(c)), \
      _dp_ = (double)(p); \
      if ( _w_ >= _dp_ ) _w_ -= (_dp_*(double)((int)(_w_*(pinv)))); \
      ans = (anstype) _w_; }
#else

#include "inline.h"

typedef unsigned int ModNum;

#define AxBplusCmodP(ans,anstype,a,b,c,p,pinv) \
  { DMAR(a,b,c,p,ans) }

#define AxBmodP(ans,anstype,a,b,p,pinv) \
  { DMAR(a,b,0,p,ans) }

#define AxBmodPnostrchk(ans,anstype,a,b,p,pinv) \
  { DMAR(a,b,0,p,ans) }

#define AxBplusCmodPnostrchk(ans,anstype,a,b,c,p,pinv) \
  { DMAR(a,b,c,p,ans) }
#endif

#define AstrictmodP(a,p) ((a)>=(p)?((a)-(p)):(a))

#define AplusBmodP(a,b,p) (((p)-(b))>(a)?((a)+(b)): ((a)-((p)-(b))))
#define A_BmodP(a,b,p) ((a)>=(b)?((a)-(b)): (((p)-(b))+(a)))

void C_DFT_FORE(ModNum *,int,int,int,ModNum *,
#ifdef POWA_STRIDE
	int
#else
	ModNum *,int,ModNum,double,ModNum *
#endif
);

void C_DFT_BACK(ModNum *,int,int,int,ModNum *,
#ifdef POWA_STRIDE
		 int
#else
		 ModNum *,int,int,int,ModNum,ModNum,double,ModNum *
#endif
);

void C_PREP_ALPHA(ModNum,int,int,int,ModNum *,ModNum,double);