#include <complex.h>
|
|
#include <gsl/gsl_vector.h>
|
|
|
|
|
|
|
|
gsl_vector_complex *cvec_dot_gslcplx(gsl_vector_complex *v, gsl_complex x);
|
|
gsl_vector_complex *vec_dot_gslcplx(gsl_vector *v, gsl_complex x);
|
|
gsl_vector_complex *cvec_dot_c(gsl_vector_complex *v, complex double x);
|
|
gsl_vector_complex *vec_dot_c(gsl_vector *v, complex double x);
|
|
void gsl_vector_complex_print(gsl_vector_complex *v);
|
|
|
|
#define gsl_cplx_from_c99(x) (gsl_complex){.dat = {creal(x), cimag(x)}}
|
|
|
|
complex double ddot(complex double x, complex double y);
|
|
|
|
|
|
#define dot(x, y) _Generic((x), \
|
|
gsl_vector* : dot_given_vec(y), \
|
|
gsl_vector_complex* : dot_given_cplx_vec(y), \
|
|
default : ddot) \
|
|
((x), (y))
|
|
|
|
|
|
#define dot_given_vec(y) _Generic ((y), \
|
|
gsl_complex : vec_dot_gslcplx, \
|
|
default : vec_dot_c)
|
|
|
|
|
|
#define dot_given_cplx_vec(y) _Generic((y), \
|
|
gsl_complex : cvec_dot_gslcplx, \
|
|
default : cvec_dot_c)
|