Тема: Як краще працювати з комплексними числами в C ?
Порадьте, будь-ласка, як краще та ефективніше працювати з комплексними числами в мові C ?
Варіант №1: Використовувати вбудований тип, що є в C99.
#include <complex.h>
...
double complex sum(double complex z1, double complex z2)
{
return (z1 + z2);
}
...
double complex z1, z2, z3;
z1 = 1.0 + I*2.0;
z2 = 3.0 + I*4.0;
z3 = sum(z1, z2);
Варінт №2: Ввести структуру Complex, і передавати її по значенню.
struct Complex
{
double re;
double im;
}
typedef struct Complex Complex;
Complex sum(Complex z1, Complex z2)
{
Complex temp;
temp.re = z1.re + z2.re;
temp.im = z1.im + z2.im;
return temp;
}
Варінт №3: Передавати комплексні числа за допомогою покажчиків.
struct Complex
{
double re;
double im;
}
typedef struct Complex Complex;
Complex * complex_init(double real_part, double imaginary_part)
{
Complex *temp;
temp = (Complex *)malloc( sizeof(Complex) );
temp->re = real_part;
temp->im = imaginary_part;
return temp;
}
void complex_free(Complex *z)
{
free(z);
}
void complex_sum(Complex *result, Complex *z1, Complex *z2)
{
result->re = (z1->re) + (z2->re);
result->im = (z1->im) + (z2->im);
}
Здавалося би, працювати з покажчиками швидше, але записувати арифметичні операції накшталт z = a*(z1 + z2)*cos(z3) зручніше використовуючи вбудований тип.