2011年7月5日星期二

C语言中的复数运算 _Complex

/* 示例代码 */
#include <stdio.h>
#include <complex.h> /* 必要的 */

int main(void){
    double _Complex comp_num1 = 1.2 + I * 3.5;
    double _Complex comp_num2;
    /* 其中 I 可被替换为 _Complex_I */

    /* 还有两种复数 */
    float _Complex comp_num3 = 1.3 + _Complex_I * 4.2;
    long double _Complex comp_num4, comp_num5;

    /* 可以直接进行四则运算,同样支持隐式转换。 */
    comp_num2 = comp_num1 + comp_num3;

    printf("%f+%f*i\n", creal(comp_num2), cimag(comp_num2));
    /* 函数 creal 和 cimag 分别获取复数的实部和虚部,
     * 返回值为 double 型,这两个函数适用于 double _Complex。
     *
     * 对于 float _Complex,应使用 crealf、cimagf;
     * 对于 long double _Complex,应使用 creall、cimagl。
     */

    comp_num4 = (0.7 + 0.6 * _Complex_I) + comp_num3;

    /* 还有三角函数 */

    /* cos */
    comp_num5 = ccosl(comp_num4);
    printf("%Lf+%Lf*i\n", creall(comp_num5), cimagl(comp_num5));


    /* ccosl 是用于 long double _Complex,
     * 对于 double _Complex 应使用 ccos;
     * float _Complex 应使用 ccosl.
     */

    /* 一般的,用于 float _Complex 的函数,都比用于 double _Complex 的函数多一个f,
     * long double _Complex 则多一个l。
     *  对于以下函数也适用。
     */

    /* 正弦 csin;
     * 正切 ctan;
     * 反三角函数 casin cacos catan;
     * 双曲函数 csinh ccosh ctanh cacosh cacosh catanh;
     * 指数函数 cexp;
     * 对数函数 clog;
     * 取绝对值 cabs;
     * 乘方 cpow;
     * 开平方 csqrt;
     *
     * 取辐角 carg;
     * 求共轭复数 conj;
     * 求投影 cproj;
     * 这些函数都适用于 double _Complex。
     */

    return 0;
}


用gcc编译时需要加上 -lm 参数。

没有评论:

发表评论