复数
本章描述的函数提供了对复数的支持。算法尽量避免不必要的向上溢出和向下溢出的调整,允许函数在尽可能多的复杂平面上求值。
对于多值函数,选择分支要遵循Abramowitz和Stegun的惯例。函数返回与GNU Calc中相同的主值,返回与“Common Lisp, The Language (Second Edition)”1和HP-28/48系列计算器中相同的主值。
复数类型在头文件gsl_complex中定义,对应的复函数和算术运算在gsl_complex_math.h中定义。
5.1 复数表示形式
复数使用类型gsl_complex表示。这种类型的内部表示形式可能因平台而异,不应直接访问。下面描述的函数和宏允许以可移植的方式操作复数。
作为参考,gsl_complex类型的默认形式由以下结构给出:
typedef struct
{
double dat[2];
} gsl_complex;
实部和虚部存储在两个元素数组的相邻元素中。这消除了实部和虚部之间的任何填充(dat[0]和dat[1]),允许将结构正确地映射到打包的复杂数组。
gsl_complex gsl_complex_rect(double x, double y)
函数使用直角笛卡儿分量(x,y)来返回复数z = x + iy。当定义了HAVE_INLINE时,将使用该函数的内联版本。
gsl_complex gsl_complex_polar(double r, double theta)
函数返回复数z = r exp (iθ)= r (cos(θ) + isin(θ))从极坐标表示法(r, theta)
GSL_REAL(z)
GSL_IMAG(z)
这两个宏返回复数z的实部和虚部。
GSL_SET_COMPLEX(zp, x, y)
本宏使用笛卡尔分量(x, y)来设置zp指向的复数的实部和虚部。例如:
设置z为3+4i。
GSL_SET_COMPLEX(&z, 3, 4)
GSL_SET_REAL(zp, x)
GSL_SET_IMAG(zp, y)
这两个宏允许单独设置zp所指向的复数的实部和虚部。