Вопрос

Мне нужно вычислить воображаемое экспоненту в C.

Насколько я знаю, в C. нет сложной библиотеки номеров в C. Можно получить e^x с участием exp(x) из math.h, но как я могу вычислить ценность e^(-i), куда i = sqrt(-1)?

Это было полезно?

Решение

Обратите внимание, что экспонендент комплексного числа равен:

e^(ix) = cos(x)+i*sin(x)

Потом:

e^(-i) = cos(-1)+i*sin(-1)

Другие советы

В C99 есть complex тип. Включать complex.h; Вам может потребоваться связать с -lm на GCC. Обратите внимание, что Microsoft Visual C не поддерживает complex; Если вам нужно использовать этот компилятор, возможно, вы можете посыпать каким-то C ++ и использовать complex шаблон.

I определяется как воображаемая единица, а cexp делает экспоненцию. Полный код примера:

#include <complex.h>
#include <stdio.h>

int main() {
    complex x = cexp(-I);
    printf("%lf + %lfi\n", creal(x), cimag(x));
    return 0;
}

Видеть man 7 complex Чтобы получить больше информации.

С использованием Формула Эйлера У вас есть это e^-i == cos(1) - i*sin(1)

e^-j просто cos(1) - j*sin(1), Таким образом, вы можете просто генерировать реальные и мнимые части с использованием реальных функций.

Просто используйте декартовую форму

если z = m*e^j*(arg);

re(z) = m * cos(arg);
im(z) = m * sin(arg);

Вызывает функцию C ++ решение для вас? C ++ STL имеет хороший класс комплекса и повысить также предложить несколько хороших вариантов. Напишите функцию в C ++ и объявите его «Extern C»

extern "C" void myexp(float*, float*);

#include <complex>

using std::complex;

void myexp (float *real, float *img )
{
  complex<float> param(*real, *img);
  complex<float> result = exp (param);
  *real = result.real();
  *img = result.imag();
}

Затем вы можете вызвать функцию из любого C-кода, на которой вы полагаетесь (ANSI-C, C99, ...).

#include <stdio.h>

void myexp(float*, float*);

int main(){
    float real = 0.0;
    float img = -1.0;
    myexp(&real, &img);
    printf ("e^-i = %f + i* %f\n", real, img);
    return 0;
}

В C ++ можно сделать напрямую: std :: exp (std :: комплекс (0, -1));

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top