67#define CONCAT(prefix, name) prefix ## name
68#if defined(NFFT_SINGLE)
70typedef float _Complex C;
71#define Y(name) CONCAT(nfftf_,name)
72#define FFTW(name) CONCAT(fftwf_,name)
73#define NFFT(name) CONCAT(nfftf_,name)
74#define NFCT(name) CONCAT(nfctf_,name)
75#define NFST(name) CONCAT(nfstf_,name)
76#define NFSFT(name) CONCAT(nfsftf_,name)
77#define SOLVER(name) CONCAT(solverf_,name)
78#elif defined(NFFT_LDOUBLE)
80typedef long double _Complex C;
81#define Y(name) CONCAT(nfftl_,name)
82#define FFTW(name) CONCAT(fftwl_,name)
83#define NFFT(name) CONCAT(nfftl_,name)
84#define NFCT(name) CONCAT(nfctl_,name)
85#define NFST(name) CONCAT(nfstl_,name)
86#define NFSFT(name) CONCAT(nfsftl_,name)
87#define SOLVER(name) CONCAT(solverl_,name)
90typedef double _Complex C;
91#define Y(name) CONCAT(nfft_,name)
92#define FFTW(name) CONCAT(fftw_,name)
93#define NFFT(name) CONCAT(nfft_,name)
94#define NFCT(name) CONCAT(nfct_,name)
95#define NFST(name) CONCAT(nfst_,name)
96#define NFSFT(name) CONCAT(nfsft_,name)
97#define SOLVER(name) CONCAT(solver_,name)
99#define X(name) Y(name)
101#define STRINGIZEx(x) #x
102#define STRINGIZE(x) STRINGIZEx(x)
105# define K(x) ((R) x##L)
109#define DK(name, value) const R name = K(value)
111#if defined __CYGWIN32__ && !defined __CYGWIN__
115# define __CYGWIN__ __CYGWIN32__
120typedef ptrdiff_t INT;
122#if defined(NFFT_LDOUBLE)
123 #define MANT_DIG LDBL_MANT_DIG
124 #define MIN_EXP LDBL_MIN_EXP
125 #define MAX_EXP LDBL_MAX_EXP
126 #define EPSILON LDBL_EPSILON
127#elif defined(NFFT_SINGLE)
128 #define MANT_DIG FLT_MANT_DIG
129 #define MIN_EXP FLT_MIN_EXP
130 #define MAX_EXP FLT_MAX_EXP
131 #define EPSILON FLT_EPSILON
133 #define MANT_DIG DBL_MANT_DIG
134 #define MIN_EXP DBL_MIN_EXP
135 #define MAX_EXP DBL_MAX_EXP
136 #define EPSILON DBL_EPSILON
139#define KPI K(3.1415926535897932384626433832795028841971693993751)
140#define K2PI K(6.2831853071795864769252867665590057683943387987502)
141#define K4PI K(12.5663706143591729538505735331180115367886775975004)
142#define KE K(2.7182818284590452353602874713526624977572470937000)
144#define IF(x,a,b) ((x)?(a):(b))
145#define MIN(a,b) (((a)<(b))?(a):(b))
146#define MAX(a,b) (((a)>(b))?(a):(b))
147#define ABS(x) (((x)>K(0.0))?(x):(-(x)))
148#define SIGN(a) (((a)>=0)?1:-1)
149#define SIGN(a) (((a)>=0)?1:-1)
150#define SIGNF(a) IF((a)<K(0.0),K(-1.0),K(1.0))
153#define SIZE(x) sizeof(x)/sizeof(x[0])
156#define CSWAP(x,y) {C* NFFT_SWAP_temp__; \
157 NFFT_SWAP_temp__=(x); (x)=(y); (y)=NFFT_SWAP_temp__;}
160#define RSWAP(x,y) {R* NFFT_SWAP_temp__; NFFT_SWAP_temp__=(x); \
161 (x)=(y); (y)=NFFT_SWAP_temp__;}
165#if defined(DIRAC_DELTA)
166 #define PHI_HUT(n,k,d) K(1.0)
167 #define PHI(n,x,d) IF(FABS((x)) < K(10E-8),K(1.0),K(0.0))
168 #define WINDOW_HELP_INIT(d)
169 #define WINDOW_HELP_FINALIZE
170 #define WINDOW_HELP_ESTIMATE_m 0
171#elif defined(GAUSSIAN)
172 #define PHI_HUT(n,k,d) ((R)EXP(-(POW(KPI*(k)/n,K(2.0))*ths->b[d])))
173 #define PHI(n,x,d) ((R)EXP(-POW((x)*((R)n),K(2.0)) / \
174 ths->b[d])/SQRT(KPI*ths->b[d]))
175 #define WINDOW_HELP_INIT \
178 ths->b = (R*) Y(malloc)(ths->d*sizeof(R)); \
179 for (WINDOW_idx = 0; WINDOW_idx < ths->d; WINDOW_idx++) \
180 ths->b[WINDOW_idx]=(K(2.0)*ths->sigma[WINDOW_idx]) / \
181 (K(2.0)*ths->sigma[WINDOW_idx] - K(1.0)) * (((R)ths->m) / KPI); \
183 #define WINDOW_HELP_FINALIZE {Y(free)(ths->b);}
187 #define WINDOW_HELP_ESTIMATE_m 17
190 #define WINDOW_HELP_ESTIMATE_m 17
193 #define WINDOW_HELP_ESTIMATE_m 13
196 #define WINDOW_HELP_ESTIMATE_m 5
200 #define WINDOW_HELP_ESTIMATE_m 13
202#elif defined(B_SPLINE)
203 #define PHI_HUT(n,k,d) ((R)(((k) == 0) ? K(1.0) / n : \
204 POW(SIN((k) * KPI / n) / ((k) * KPI / n), \
206 #define PHI(n,x,d) (Y(bsplines)(2*ths->m,((x)*n) + \
208 #define WINDOW_HELP_INIT
209 #define WINDOW_HELP_FINALIZE
213 #define WINDOW_HELP_ESTIMATE_m 11
216 #define WINDOW_HELP_ESTIMATE_m 11
219 #define WINDOW_HELP_ESTIMATE_m 11
222 #define WINDOW_HELP_ESTIMATE_m 11
226 #define WINDOW_HELP_ESTIMATE_m 11
228#elif defined(SINC_POWER)
229 #define PHI_HUT(n,k,d) (Y(bsplines)(2 * ths->m, (K(2.0) * ths->m*(k)) / \
230 ((K(2.0) * ths->sigma[(d)] - 1) * n / \
231 ths->sigma[(d)]) + (R)ths->m))
232 #define PHI(n,x,d) ((R)(n / ths->sigma[(d)] * \
233 (K(2.0) * ths->sigma[(d)] - K(1.0))/ (K(2.0)*ths->m) * \
234 POW(Y(sinc)(KPI * n / ths->sigma[(d)] * (x) * \
235 (K(2.0) * ths->sigma[(d)] - K(1.0)) / (K(2.0)*ths->m)) , 2*ths->m) / \
237 #define WINDOW_HELP_INIT
238 #define WINDOW_HELP_FINALIZE
242 #define WINDOW_HELP_ESTIMATE_m 13
245 #define WINDOW_HELP_ESTIMATE_m 13
248 #define WINDOW_HELP_ESTIMATE_m 11
251 #define WINDOW_HELP_ESTIMATE_m 11
255 #define WINDOW_HELP_ESTIMATE_m 11
258 #define PHI_HUT(n,k,d) (Y(bessel_i0)((R)(ths->m) * SQRT(ths->b[d] * ths->b[d] - (K(2.0) * KPI * (R)(k) / (R)(n)) * (K(2.0) * KPI * (R)(k) / (R)(n)))))
259 #define PHI(n,x,d) ( (((R)(ths->m) * (R)(ths->m) - (x) * (R)(n) * (x) * (R)(n)) > K(0.0)) \
260 ? SINH(ths->b[d] * SQRT((R)(ths->m) * (R)(ths->m) - (x) * (R)(n) * (x) * (R)(n))) \
261 / (KPI * SQRT((R)(ths->m) * (R)(ths->m) - (x) * (R)(n) * (x) * (R)(n))) \
262 : ((((R)(ths->m) * (R)(ths->m) - (x) * (R)(n) * (x) * (R)(n)) < K(0.0)) \
263 ? SIN(ths->b[d] * SQRT((x) * (R)(n) * (x) * (R)(n) - (R)(ths->m) * (R)(ths->m))) \
264 / (KPI * SQRT((x) * (R)(n) * (x) * (R)(n) - (R)(ths->m) * (R)(ths->m))) \
266 #define WINDOW_HELP_INIT \
269 ths->b = (R*) Y(malloc)((size_t)(ths->d) * sizeof(R)); \
270 for (WINDOW_idx = 0; WINDOW_idx < ths->d; WINDOW_idx++) \
271 ths->b[WINDOW_idx] = (KPI * (K(2.0) - K(1.0) / ths->sigma[WINDOW_idx])); \
273 #define WINDOW_HELP_FINALIZE {Y(free)(ths->b);}
277 #define WINDOW_HELP_ESTIMATE_m 10
280 #define WINDOW_HELP_ESTIMATE_m 9
283 #define WINDOW_HELP_ESTIMATE_m 8
285 #define WINDOW_HELP_ESTIMATE_m 4
289 #define WINDOW_HELP_ESTIMATE_m 8
294INT Y(m2K)(
const INT m);
296#if defined(NFFT_LDOUBLE)
297#if HAVE_DECL_COPYSIGNL == 0
298extern long double copysignl(
long double,
long double);
300#if HAVE_DECL_NEXTAFTERL == 0
301extern long double nextafterl(
long double,
long double);
303#if HAVE_DECL_NANL == 0
304extern long double nanl(
const char *tag);
306#if HAVE_DECL_CEILL == 0
307extern long double ceill(
long double);
309#if HAVE_DECL_FLOORL == 0
310extern long double floorl(
long double);
312#if HAVE_DECL_NEARBYINTL == 0
313extern long double nearbyintl(
long double);
315#if HAVE_DECL_RINTL == 0
316extern long double rintl(
long double);
318#if HAVE_DECL_ROUNDL == 0
319extern long double roundl(
long double);
321#if HAVE_DECL_LRINTL == 0
322extern long int lrintl(
long double);
324#if HAVE_DECL_LROUNDL == 0
325extern long int lroundl(
long double);
327#if HAVE_DECL_LLRINTL == 0
328extern long long int llrintl(
long double);
330#if HAVE_DECL_LLROUNDL == 0
331extern long long int llroundl(
long double);
333#if HAVE_DECL_TRUNCL == 0
334extern long double truncl(
long double);
336#if HAVE_DECL_FMODL == 0
337extern long double fmodl(
long double,
long double);
339#if HAVE_DECL_REMAINDERL == 0
340extern long double remainderl(
long double,
long double);
342#if HAVE_DECL_REMQUOL == 0
343extern long double remquol(
long double x,
long double y,
int *);
345#if HAVE_DECL_FDIML == 0
346extern long double fdiml(
long double,
long double);
348#if HAVE_DECL_FMAXL == 0
349extern long double fmaxl(
long double,
long double);
351#if HAVE_DECL_FMINL == 0
352extern long double fminl(
long double,
long double);
354#if HAVE_DECL_FMAL == 0
355extern long double fmal(
long double x,
long double y,
long double z);
357#if HAVE_DECL_FABSL == 0
358extern long double fabsl(
long double);
360#if HAVE_DECL_SQRTL == 0
361extern long double sqrtl(
long double);
363#if HAVE_DECL_CBRTL == 0
364extern long double cbrtl(
long double);
366#if HAVE_DECL_HYPOTL == 0
367extern long double hypotl(
long double,
long double);
369#if HAVE_DECL_EXPL == 0
370extern long double expl(
long double);
372#if HAVE_DECL_EXP2L == 0
373extern long double exp2l(
long double);
375#if HAVE_DECL_EXPM1L == 0
376extern long double expm1l(
long double);
378#if HAVE_DECL_LOGL == 0
379extern long double logl(
long double);
381#if HAVE_DECL_LOG2L == 0
382extern long double log2l(
long double);
384#if HAVE_DECL_LOG10L == 0
385extern long double log10l(
long double);
387#if HAVE_DECL_LOG1PL == 0
388extern long double log1pl(
long double);
390#if HAVE_DECL_LOGBL == 0
391extern long double logbl(
long double);
393#if HAVE_DECL_ILOGBL == 0
394extern int ilogbl(
long double);
396#if HAVE_DECL_MODFL == 0
397extern long double modfl(
long double,
long double *);
399#if HAVE_DECL_FREXPL == 0
400extern long double frexpl(
long double,
int *);
402#if HAVE_DECL_LDEXPL == 0
403extern long double ldexpl(
long double,
int);
405#if HAVE_DECL_SCALBNL == 0
406extern long double scalbnl(
long double,
int);
408#if HAVE_DECL_SCALBLNL == 0
409extern long double scalblnl(
long double,
long int);
411#if HAVE_DECL_POWL == 0
412extern long double powl(
long double,
long double);
414#if HAVE_DECL_COSL == 0
415extern long double cosl(
long double);
417#if HAVE_DECL_SINL == 0
418extern long double sinl(
long double);
420#if HAVE_DECL_TANL == 0
421extern long double tanl(
long double);
423#if HAVE_DECL_COSHL == 0
424extern long double coshl(
long double);
426#if HAVE_DECL_SINHL == 0
427extern long double sinhl(
long double);
429#if HAVE_DECL_TANHL == 0
430extern long double tanhl(
long double);
432#if HAVE_DECL_ACOSL == 0
433extern long double acosl(
long double);
435#if HAVE_DECL_ASINL == 0
436extern long double asinl(
long double);
438#if HAVE_DECL_ATANL == 0
439extern long double atanl(
long double);
441#if HAVE_DECL_ATAN2L == 0
442extern long double atan2l(
long double,
long double);
444#if HAVE_DECL_ACOSHL == 0
445extern long double acoshl(
long double);
447#if HAVE_DECL_ASINHL == 0
448extern long double asinhl(
long double);
450#if HAVE_DECL_ATANHL == 0
451extern long double atanhl(
long double);
453#if HAVE_DECL_TGAMMAL == 0
454extern long double tgammal(
long double);
456#if HAVE_DECL_LGAMMAL == 0
457extern long double lgammal(
long double);
459#if HAVE_DECL_J0L == 0
460extern long double j0l(
long double);
462#if HAVE_DECL_J1L == 0
463extern long double j1l(
long double);
465#if HAVE_DECL_JNL == 0
466extern long double jnl(
int,
long double);
468#if HAVE_DECL_Y0L == 0
469extern long double y0l(
long double);
471#if HAVE_DECL_Y1L == 0
472extern long double y1l(
long double);
474#if HAVE_DECL_YNL == 0
475extern long double ynl(
int,
long double);
477#if HAVE_DECL_ERFL == 0
478extern long double erfl(
long double);
480#if HAVE_DECL_ERFCL == 0
481extern long double erfcl(
long double);
483#if HAVE_DECL_CREALL == 0
484extern long double creall(
long double _Complex z);
486#if HAVE_DECL_CIMAGL == 0
487extern long double cimagl(
long double _Complex z);
489#if HAVE_DECL_CABSL == 0
490extern long double cabsl(
long double _Complex z);
492#if HAVE_DECL_CARGL == 0
493extern long double cargl(
long double _Complex z);
495#if HAVE_DECL_CONJL == 0
496extern long double _Complex conjl(
long double _Complex z);
498#if HAVE_DECL_CPROJL == 0
499extern long double _Complex cprojl(
long double _Complex z);
501#if HAVE_DECL_CSQRTL == 0
502extern long double _Complex csqrtl(
long double _Complex z);
504#if HAVE_DECL_CEXPL == 0
505extern long double _Complex cexpl(
long double _Complex z);
507#if HAVE_DECL_CLOGL == 0
508extern long double _Complex clogl(
long double _Complex z);
510#if HAVE_DECL_CPOWL == 0
511extern long double _Complex cpowl(
long double _Complex z,
long double _Complex w);
513#if HAVE_DECL_CSINL == 0
514extern long double _Complex csinl(
long double _Complex z);
516#if HAVE_DECL_CCOSL == 0
517extern long double _Complex ccosl(
long double _Complex z);
519#if HAVE_DECL_CTANL == 0
520extern long double _Complex ctanl(
long double _Complex z);
522#if HAVE_DECL_CASINL == 0
523extern long double _Complex casinl(
long double _Complex z);
525#if HAVE_DECL_CACOSL == 0
526extern long double _Complex cacosl(
long double _Complex z);
528#if HAVE_DECL_CATANL == 0
529extern long double _Complex catanl(
long double _Complex z);
531#if HAVE_DECL_CSINHL == 0
532extern long double _Complex csinhl(
long double _Complex z);
534#if HAVE_DECL_CCOSHL == 0
535extern long double _Complex ccoshl(
long double _Complex z);
537#if HAVE_DECL_CTANHL == 0
538extern long double _Complex ctanhl(
long double _Complex z);
540#if HAVE_DECL_CASINHL == 0
541extern long double _Complex casinhl(
long double _Complex z);
543#if HAVE_DECL_CACOSHL == 0
544extern long double _Complex cacoshl(
long double _Complex z);
546#if HAVE_DECL_CATANHL == 0
547extern long double _Complex catanhl(
long double _Complex z);
549#define COPYSIGN copysignl
550#define NEXTAFTER nextafterl
554#define NEARBYINT nearbyintl
558#define LROUND lroundl
559#define LLRINT llrintl
560#define LLROUND llroundl
563#define REMAINDER remainderl
564#define REMQUO remquol
585#define SCALBN scalbnl
586#define SCALBLN scalblnl
601#define TGAMMA tgammal
602#define LGAMMA lgammal
630#define CASINH casinhl
631#define CACOSH cacoshl
632#define CATANH catanhl
633#elif defined(NFFT_SINGLE)
634#if HAVE_DECL_COPYSIGNF == 0
635extern float copysignf(
float,
float);
637#if HAVE_DECL_NEXTAFTERF == 0
638extern float nextafterf(
float,
float);
640#if HAVE_DECL_NANF == 0
641extern float nanf(
const char *tag);
643#if HAVE_DECL_CEILF == 0
644extern float ceilf(
float);
646#if HAVE_DECL_FLOORF == 0
647extern float floorf(
float);
649#if HAVE_DECL_NEARBYINTF == 0
650extern float nearbyintf(
float);
652#if HAVE_DECL_RINTF == 0
653extern float rintf(
float);
655#if HAVE_DECL_ROUNDF == 0
656extern float roundf(
float);
658#if HAVE_DECL_LRINTF == 0
659extern long int lrintf(
float);
661#if HAVE_DECL_LROUNDF == 0
662extern long int lroundf(
float);
664#if HAVE_DECL_LLRINTF == 0
665extern long long int llrintf(
float);
667#if HAVE_DECL_LLROUNDF == 0
668extern long long int llroundf(
float);
670#if HAVE_DECL_TRUNCF == 0
671extern float truncf(
float);
673#if HAVE_DECL_FMODF == 0
674extern float fmodf(
float,
float);
676#if HAVE_DECL_REMAINDERF == 0
677extern float remainderf(
float,
float);
679#if HAVE_DECL_REMQUOF == 0
680extern float remquof(
float x,
float y,
int *);
682#if HAVE_DECL_FDIMF == 0
683extern float fdimf(
float,
float);
685#if HAVE_DECL_FMAXF == 0
686extern float fmaxf(
float,
float);
688#if HAVE_DECL_FMINF == 0
689extern float fminf(
float,
float);
691#if HAVE_DECL_FMAF == 0
692extern float fmaf(
float x,
float y,
float z);
694#if HAVE_DECL_FABSF == 0
695extern float fabsf(
float);
697#if HAVE_DECL_SQRTF == 0
698extern float sqrtf(
float);
700#if HAVE_DECL_CBRTF == 0
701extern float cbrtf(
float);
703#if HAVE_DECL_HYPOTF == 0
704extern float hypotf(
float,
float);
706#if HAVE_DECL_EXPF == 0
707extern float expf(
float);
709#if HAVE_DECL_EXP2F == 0
710extern float exp2f(
float);
712#if HAVE_DECL_EXPM1F == 0
713extern float expm1f(
float);
715#if HAVE_DECL_LOGF == 0
716extern float logf(
float);
718#if HAVE_DECL_LOG2F == 0
719extern float log2f(
float);
721#if HAVE_DECL_LOG10F == 0
722extern float log10f(
float);
724#if HAVE_DECL_LOG1PF == 0
725extern float log1pf(
float);
727#if HAVE_DECL_LOGBF == 0
728extern float logbf(
float);
730#if HAVE_DECL_ILOGBF == 0
731extern int ilogbf(
float);
733#if HAVE_DECL_MODFF == 0
734extern float modff(
float,
float *);
736#if HAVE_DECL_FREXPF == 0
737extern float frexpf(
float,
int *);
739#if HAVE_DECL_LDEXPF == 0
740extern float ldexpf(
float,
int);
742#if HAVE_DECL_SCALBNF == 0
743extern float scalbnf(
float,
int);
745#if HAVE_DECL_SCALBLNF == 0
746extern float scalblnf(
float,
long int);
748#if HAVE_DECL_POWF == 0
749extern float powf(
float,
float);
751#if HAVE_DECL_COSF == 0
752extern float cosf(
float);
754#if HAVE_DECL_SINF == 0
755extern float sinf(
float);
757#if HAVE_DECL_TANF == 0
758extern float tanf(
float);
760#if HAVE_DECL_COSHF == 0
761extern float coshf(
float);
763#if HAVE_DECL_SINHF == 0
764extern float sinhf(
float);
766#if HAVE_DECL_TANHF == 0
767extern float tanhf(
float);
769#if HAVE_DECL_ACOSF == 0
770extern float acosf(
float);
772#if HAVE_DECL_ASINF == 0
773extern float asinf(
float);
775#if HAVE_DECL_ATANF == 0
776extern float atanf(
float);
778#if HAVE_DECL_ATAN2F == 0
779extern float atan2f(
float,
float);
781#if HAVE_DECL_ACOSHF == 0
782extern float acoshf(
float);
784#if HAVE_DECL_ASINHF == 0
785extern float asinhf(
float);
787#if HAVE_DECL_ATANHF == 0
788extern float atanhf(
float);
790#if HAVE_DECL_TGAMMAF == 0
791extern float tgammaf(
float);
793#if HAVE_DECL_LGAMMAF == 0
794extern float lgammaf(
float);
796#if HAVE_DECL_J0F == 0
797extern float j0f(
float);
799#if HAVE_DECL_J1F == 0
800extern float j1f(
float);
802#if HAVE_DECL_JNF == 0
803extern float jnf(
int,
float);
805#if HAVE_DECL_Y0F == 0
806extern float y0f(
float);
808#if HAVE_DECL_Y1F == 0
809extern float y1f(
float);
811#if HAVE_DECL_YNF == 0
812extern float ynf(
int,
float);
814#if HAVE_DECL_ERFF == 0
815extern float erff(
float);
817#if HAVE_DECL_ERFCF == 0
818extern float erfcf(
float);
820#if HAVE_DECL_CREALF == 0
821extern float crealf(
float _Complex z);
823#if HAVE_DECL_CIMAGF == 0
824extern float cimagf(
float _Complex z);
826#if HAVE_DECL_CABSF == 0
827extern float cabsf(
float _Complex z);
829#if HAVE_DECL_CARGF == 0
830extern float cargf(
float _Complex z);
832#if HAVE_DECL_CONJF == 0
833extern float _Complex conjf(
float _Complex z);
835#if HAVE_DECL_CPROJF == 0
836extern float _Complex cprojf(
float _Complex z);
838#if HAVE_DECL_CSQRTF == 0
839extern float _Complex csqrtf(
float _Complex z);
841#if HAVE_DECL_CEXPF == 0
842extern float _Complex cexpf(
float _Complex z);
844#if HAVE_DECL_CLOGF == 0
845extern float _Complex clogf(
float _Complex z);
847#if HAVE_DECL_CPOWF == 0
848extern float _Complex cpowf(
float _Complex z,
float _Complex w);
850#if HAVE_DECL_CSINF == 0
851extern float _Complex csinf(
float _Complex z);
853#if HAVE_DECL_CCOSF == 0
854extern float _Complex ccosf(
float _Complex z);
856#if HAVE_DECL_CTANF == 0
857extern float _Complex ctanf(
float _Complex z);
859#if HAVE_DECL_CASINF == 0
860extern float _Complex casinf(
float _Complex z);
862#if HAVE_DECL_CACOSF == 0
863extern float _Complex cacosf(
float _Complex z);
865#if HAVE_DECL_CATANF == 0
866extern float _Complex catanf(
float _Complex z);
868#if HAVE_DECL_CSINHF == 0
869extern float _Complex csinhf(
float _Complex z);
871#if HAVE_DECL_CCOSHF == 0
872extern float _Complex ccoshf(
float _Complex z);
874#if HAVE_DECL_CTANHF == 0
875extern float _Complex ctanhf(
float _Complex z);
877#if HAVE_DECL_CASINHF == 0
878extern float _Complex casinhf(
float _Complex z);
880#if HAVE_DECL_CACOSHF == 0
881extern float _Complex cacoshf(
float _Complex z);
883#if HAVE_DECL_CATANHF == 0
884extern float _Complex catanhf(
float _Complex z);
886#define COPYSIGN copysignf
887#define NEXTAFTER nextafterf
891#define NEARBYINT nearbyintf
895#define LROUND lroundf
896#define LLRINT llrintf
897#define LLROUND llroundf
900#define REMAINDER remainderf
901#define REMQUO remquof
922#define SCALBN scalbnf
923#define SCALBLN scalblnf
938#define TGAMMA tgammaf
939#define LGAMMA lgammaf
967#define CASINH casinhf
968#define CACOSH cacoshf
969#define CATANH catanhf
971#if HAVE_DECL_COPYSIGN == 0
972extern double copysign(
double,
double);
974#if HAVE_DECL_NEXTAFTER == 0
975extern double nextafter(
double,
double);
977#if HAVE_DECL_NAN == 0
978extern double nan(
const char *tag);
980#if HAVE_DECL_CEIL == 0
981extern double ceil(
double);
983#if HAVE_DECL_FLOOR == 0
984extern double floor(
double);
986#if HAVE_DECL_NEARBYINT == 0
987extern double nearbyint(
double);
989#if HAVE_DECL_RINT == 0
990extern double rint(
double);
992#if HAVE_DECL_ROUND == 0
993extern double round(
double);
995#if HAVE_DECL_LRINT == 0
996extern long int lrint(
double);
998#if HAVE_DECL_LROUND == 0
999extern long int lround(
double);
1001#if HAVE_DECL_LLRINT == 0
1002extern long long int llrint(
double);
1004#if HAVE_DECL_LLROUND == 0
1005extern long long int llround(
double);
1007#if HAVE_DECL_TRUNC == 0
1008extern double trunc(
double);
1010#if HAVE_DECL_FMOD == 0
1011extern double fmod(
double,
double);
1013#if HAVE_DECL_REMAINDER == 0
1014extern double remainder(
double,
double);
1016#if HAVE_DECL_REMQUO == 0
1017extern double remquo(
double x,
double y,
int *);
1019#if HAVE_DECL_FDIM == 0
1020extern double fdim(
double,
double);
1022#if HAVE_DECL_FMAX == 0
1023extern double fmax(
double,
double);
1025#if HAVE_DECL_FMIN == 0
1026extern double fmin(
double,
double);
1028#if HAVE_DECL_FMA == 0
1029extern double fma(
double x,
double y,
double z);
1031#if HAVE_DECL_FABS == 0
1032extern double fabs(
double);
1034#if HAVE_DECL_SQRT == 0
1035extern double sqrt(
double);
1037#if HAVE_DECL_CBRT == 0
1038extern double cbrt(
double);
1040#if HAVE_DECL_HYPOT == 0
1041extern double hypot(
double,
double);
1043#if HAVE_DECL_EXP == 0
1044extern double exp(
double);
1046#if HAVE_DECL_EXP2 == 0
1047extern double exp2(
double);
1049#if HAVE_DECL_EXPM1 == 0
1050extern double expm1(
double);
1052#if HAVE_DECL_LOG == 0
1053extern double log(
double);
1055#if HAVE_DECL_LOG2 == 0
1056extern double log2(
double);
1058#if HAVE_DECL_LOG10 == 0
1059extern double log10(
double);
1061#if HAVE_DECL_LOG1P == 0
1062extern double log1p(
double);
1064#if HAVE_DECL_LOGB == 0
1065extern double logb(
double);
1067#if HAVE_DECL_ILOGB == 0
1068extern int ilogb(
double);
1070#if HAVE_DECL_MODF == 0
1071extern double modf(
double,
double *);
1073#if HAVE_DECL_FREXP == 0
1074extern double frexp(
double,
int *);
1076#if HAVE_DECL_LDEXP == 0
1077extern double ldexp(
double,
int);
1079#if HAVE_DECL_SCALBN == 0
1080extern double scalbn(
double,
int);
1082#if HAVE_DECL_SCALBLN == 0
1083extern double scalbln(
double,
long int);
1085#if HAVE_DECL_POW == 0
1086extern double pow(
double,
double);
1088#if HAVE_DECL_COS == 0
1089extern double cos(
double);
1091#if HAVE_DECL_SIN == 0
1092extern double sin(
double);
1094#if HAVE_DECL_TAN == 0
1095extern double tan(
double);
1097#if HAVE_DECL_COSH == 0
1098extern double cosh(
double);
1100#if HAVE_DECL_SINH == 0
1101extern double sinh(
double);
1103#if HAVE_DECL_TANH == 0
1104extern double tanh(
double);
1106#if HAVE_DECL_ACOS == 0
1107extern double acos(
double);
1109#if HAVE_DECL_ASIN == 0
1110extern double asin(
double);
1112#if HAVE_DECL_ATAN == 0
1113extern double atan(
double);
1115#if HAVE_DECL_ATAN2 == 0
1116extern double atan2(
double,
double);
1118#if HAVE_DECL_ACOSH == 0
1119extern double acosh(
double);
1121#if HAVE_DECL_ASINH == 0
1122extern double asinh(
double);
1124#if HAVE_DECL_ATANH == 0
1125extern double atanh(
double);
1127#if HAVE_DECL_TGAMMA == 0
1128extern double tgamma(
double);
1130#if HAVE_DECL_LGAMMA == 0
1131extern double lgamma(
double);
1133#if HAVE_DECL_J0 == 0
1134extern double j0(
double);
1136#if HAVE_DECL_J1 == 0
1137extern double j1(
double);
1139#if HAVE_DECL_JN == 0
1140extern double jn(
int,
double);
1142#if HAVE_DECL_Y0 == 0
1143extern double y0(
double);
1145#if HAVE_DECL_Y1 == 0
1146extern double y1(
double);
1148#if HAVE_DECL_YN == 0
1149extern double yn(
int,
double);
1151#if HAVE_DECL_ERF == 0
1152extern double erf(
double);
1154#if HAVE_DECL_ERFC == 0
1155extern double erfc(
double);
1157#if HAVE_DECL_CREAL == 0
1158extern double creal(
double _Complex z);
1160#if HAVE_DECL_CIMAG == 0
1161extern double cimag(
double _Complex z);
1163#if HAVE_DECL_CABS == 0
1164extern double cabs(
double _Complex z);
1166#if HAVE_DECL_CARG == 0
1167extern double carg(
double _Complex z);
1169#if HAVE_DECL_CONJ == 0
1170extern double _Complex conj(
double _Complex z);
1172#if HAVE_DECL_CPROJ == 0
1173extern double _Complex cproj(
double _Complex z);
1175#if HAVE_DECL_CSQRT == 0
1176extern double _Complex csqrt(
double _Complex z);
1178#if HAVE_DECL_CEXP == 0
1179extern double _Complex cexp(
double _Complex z);
1181#if HAVE_DECL_CLOG == 0
1182extern double _Complex clog(
double _Complex z);
1184#if HAVE_DECL_CPOW == 0
1185extern double _Complex cpow(
double _Complex z,
double _Complex w);
1187#if HAVE_DECL_CSIN == 0
1188extern double _Complex csin(
double _Complex z);
1190#if HAVE_DECL_CCOS == 0
1191extern double _Complex ccos(
double _Complex z);
1193#if HAVE_DECL_CTAN == 0
1194extern double _Complex ctan(
double _Complex z);
1196#if HAVE_DECL_CASIN == 0
1197extern double _Complex casin(
double _Complex z);
1199#if HAVE_DECL_CACOS == 0
1200extern double _Complex cacos(
double _Complex z);
1202#if HAVE_DECL_CATAN == 0
1203extern double _Complex catan(
double _Complex z);
1205#if HAVE_DECL_CSINH == 0
1206extern double _Complex csinh(
double _Complex z);
1208#if HAVE_DECL_CCOSH == 0
1209extern double _Complex ccosh(
double _Complex z);
1211#if HAVE_DECL_CTANH == 0
1212extern double _Complex ctanh(
double _Complex z);
1214#if HAVE_DECL_CASINH == 0
1215extern double _Complex casinh(
double _Complex z);
1217#if HAVE_DECL_CACOSH == 0
1218extern double _Complex cacosh(
double _Complex z);
1220#if HAVE_DECL_CATANH == 0
1221extern double _Complex catanh(
double _Complex z);
1223#define COPYSIGN copysign
1224#define NEXTAFTER nextafter
1228#define NEARBYINT nearbyint
1232#define LROUND lround
1233#define LLRINT llrint
1234#define LLROUND llround
1237#define REMAINDER remainder
1238#define REMQUO remquo
1259#define SCALBN scalbn
1260#define SCALBLN scalbln
1275#define TGAMMA tgamma
1276#define LGAMMA lgamma
1304#define CASINH casinh
1305#define CACOSH cacosh
1306#define CATANH catanh
1309#if defined(FLT_ROUND)
1311 #define FLTROUND 1.0
1313 #define FLTROUND 0.0
1316 #define FLTROUND 0.0
1319#if HAVE_DECL_DRAND48 == 0
1320 extern double drand48(
void);
1322#if HAVE_DECL_SRAND48 == 0
1323 extern void srand48(
long int);
1325#define R_RADIX FLT_RADIX
1326#define II _Complex_I
1329#if defined(NFFT_LDOUBLE)
1330# define __FGS__ "Lg"
1331# define __FES__ "LE"
1332# define __FI__ "%Lf"
1333# define __FIS__ "Lf"
1334# define __FR__ "%Le"
1335#elif defined(NFFT_SINGLE)
1342# define __FGS__ "lg"
1343# define __FES__ "lE"
1344# define __FI__ "%lf"
1345# define __FIS__ "lf"
1346# define __FR__ "%le"
1351 #define __FE__ "% 36.32LE"
1354 #define __FE__ "% 24.20LE"
1357 #define __FE__ "% 20.16lE"
1359 #define __FE__ "% 12.8E"
1363 #define __FE__ "% 20.16LE"
1369#if defined(_WIN32) || defined(_WIN64)
1376#define UNUSED(x) (void)x
1383 #define alloca __builtin_alloca
1390 #define alloca _alloca
1404 void *alloca(
size_t);
1412 #define STACK_MALLOC(T, p, x) p = (T)alloca(x)
1413 #define STACK_FREE(x)
1417 #define STACK_MALLOC(T, p, x) p = (T)Y(malloc)(x)
1418 #define STACK_FREE(x) Y(free)(x)
1422R Y(elapsed_seconds)(ticks t1, ticks t0);
1425#define UNUSED(x) (void)x
1435 double MEASURE_TIME_tt;
1436 ticks MEASURE_TIME_t0, MEASURE_TIME_t1;
1439 ths->MEASURE_TIME_t[(a)]=0; \
1445 MEASURE_TIME_t0 = getticks(); \
1450 MEASURE_TIME_t1 = getticks(); \
1451 MEASURE_TIME_tt = Y(elapsed_seconds)(MEASURE_TIME_t1,MEASURE_TIME_t0);\
1452 ths->MEASURE_TIME_t[(a)]+=MEASURE_TIME_tt; \
1454 ths->MEASURE_TIME_t[(a)]/=MEASURE_TIME_r; \
1461#ifdef MEASURE_TIME_FFTW
1462#define TIC_FFTW(a) TIC(a)
1463#define TOC_FFTW(a) TOC(a)
1477R Y(lambda)(R z, R eps);
1480R Y(lambda2)(R mu, R nu);
1486R Y(bsplines)(
const INT,
const R x);
1489typedef enum {NFFT_EPSILON = 0, NFFT_SAFE__MIN = 1, NFFT_BASE = 2,
1490 NFFT_PRECISION = 3, NFFT_MANT_DIG = 4, NFFT_FLTROUND = 5, NFFT_E_MIN = 6,
1491 NFFT_R_MIN = 7, NFFT_E_MAX = 8, NFFT_R_MAX = 9 } float_property;
1493R Y(float_property)(float_property);
1494R Y(prod_real)(R *vec, INT d);
1497INT Y(log2i)(
const INT m);
1498void Y(next_power_of_2_exp)(
const INT N, INT *N2, INT *t);
1499void Y(next_power_of_2_exp_int)(
const int N,
int *N2,
int *t);
1502 R Y(error_l_infty_double)(
const R *x,
const R *y,
const INT n);
1503 R Y(error_l_infty_1_double)(
const R *x,
const R *y,
const INT n,
const R *z,
1505R Y(error_l_2_complex)(
const C *x,
const C *y,
const INT n);
1506 R Y(error_l_2_double)(
const R *x,
const R *y,
const INT n);
1509void Y(sort_node_indices_radix_msdf)(INT n, INT *keys0, INT *keys1, INT rhigh);
1510void Y(sort_node_indices_radix_lsdf)(INT n, INT *keys0, INT *keys1, INT rhigh);
1513void Y(assertion_failed)(
const char *s,
int line,
const char *file);
1517R Y(dot_double)(R *x, INT n);
1519R Y(dot_w_complex)(C *x, R *w, INT n);
1521R Y(dot_w_double)(R *x, R *w, INT n);
1523R Y(dot_w_w2_complex)(C *x, R *w, R *w2, INT n);
1525R Y(dot_w2_complex)(C *x, R *w2, INT n);
1529void Y(cp_complex)(C *x, C *y, INT n);
1531void Y(cp_double)(R *x, R *y, INT n);
1533void Y(cp_a_complex)(C *x, R a, C *y, INT n);
1535void Y(cp_a_double)(R *x, R a, R *y, INT n);
1537void Y(cp_w_complex)(C *x, R *w, C *y, INT n);
1539void Y(cp_w_double)(R *x, R *w, R *y, INT n);
1543void Y(upd_axpy_double)(R *x, R a, R *y, INT n);
1545void Y(upd_xpay_complex)(C *x, R a, C *y, INT n);
1547void Y(upd_xpay_double)(R *x, R a, R *y, INT n);
1549void Y(upd_axpby_complex)(C *x, R a, C *y, R b, INT n);
1551void Y(upd_axpby_double)(R *x, R a, R *y, R b, INT n);
1553void Y(upd_xpawy_complex)(C *x, R a, R *w, C *y, INT n);
1555void Y(upd_xpawy_double)(R *x, R a, R *w, R *y, INT n);
1557void Y(upd_axpwy_complex)(C *x, R a, R *w, C *y, INT n);
1559void Y(upd_axpwy_double)(R *x, R a, R *w, R *y, INT n);
1562void Y(voronoi_weights_1d)(R *w, R *x,
const INT M);
1569R Y(modified_fejer)(
const INT N,
const INT kk);
1571R Y(modified_jackson2)(
const INT N,
const INT kk);
1573R Y(modified_jackson4)(
const INT N,
const INT kk);
1575R Y(modified_sobolev)(
const R mu,
const INT kk);
1577R Y(modified_multiquadric)(
const R mu,
const R c,
const INT kk);
1581 (void)((ex) || (Y(assertion_failed)(#ex, __LINE__, __FILE__), 0))
1586 (void)((ex) || (Y(assertion_failed)(#ex, __LINE__, __FILE__), 0))