Вы находитесь на странице: 1из 1

How to work with complex numbers in C?

How can I work with complex numbers in C? I see there is a complex.h header file, but it doesn't
give me much information about how to use it. How to access real and imaginary parts in an
efficient way? Are there native functions to get module and phase?

This code will help you, and it's fairly self-explanatory:

#include <stdio.h> /* Standard Library of Input and Output */


#include <complex.h> /* Standard Library of Complex Numbers */

int main() {

double complex z1 = 1.0 + 3.0 * I;


double complex z2 = 1.0 - 4.0 * I;

printf("Working with complex numbers:\n\v");

printf("Starting values: Z1 = %.2f + %.2fi\tZ2 = %.2f %+.2fi\n",


creal(z1), cimag(z1), creal(z2), cimag(z2));

double complex sum = z1 + z2;


printf("The sum: Z1 + Z2 = %.2f %+.2fi\n", creal(sum), cimag(sum));

double complex difference = z1 - z2;


printf("The difference: Z1 - Z2 = %.2f %+.2fi\n", creal(difference),
cimag(difference));

double complex product = z1 * z2;


printf("The product: Z1 x Z2 = %.2f %+.2fi\n", creal(product),
cimag(product));

double complex quotient = z1 / z2;


printf("The quotient: Z1 / Z2 = %.2f %+.2fi\n", creal(quotient),
cimag(quotient));

double complex conjugate = conj(z1);


printf("The conjugate of Z1 = %.2f %+.2fi\n", creal(conjugate),
cimag(conjugate));

return 0;
}

With:

creal(z1): get the real part (for float crealf(z1), for long double creall(z1))

cimag(z1): get the imaginary part (for float cimagf(z1), for long double cimagl(z1))

Another important point to remember when working with complex numbers is that functions like
cos(), exp() and sqrt() must be replaced with their complex forms, e.g. ccos(), cexp(), csqrt().

Вам также может понравиться