我在C中使用GSL来处理复数。
我必须使用复数,例如+ -1,0,+ -ia很多次(跨越不同的函数),类似10 ^ 9我想(甚至更多,也许,还不知道),所以我需要一种非常快速的方式来打电话给他们。
在gsl_complex_math.h中,它们的定义如下:
#define GSL_COMPLEX_ONE (gsl_complex_rect(1.0,0.0))
其中
gsl_complex_rect (double x, double y)
{ /* return z = x + i y */
gsl_complex z;
GSL_SET_COMPLEX (&z, x, y);
return z;
}
和
#define GSL_SET_COMPLEX(zp,x,y) do {(zp)->dat[0]=(x); (zp)->dat[1]=(y);} while(0)
对于我来说,这看起来像是一大堆代码和临时变量声明,但我在评估代码效率方面没有经验。
如果我在像global.h这样的标题中声明一个全局变量怎么样:
#if defined MAIN_PROGRAM
#define EXTERN
#else
#define EXTERN extern
#endif
EXTERN const gsl_complex C_U = {.dat[0] = 1., .dat[1] = 0.}
1)我应该期待性能提升吗? 2)代码是否足够干净?我进入的任何陷阱? 3)有更好的方法吗?