Как работать с комплексными числами в си?

У меня проблема с созданием комплексного числа в языке си. В Си есть библиотека complex.h , но создать его я не могу, визуалка ругается. Задача состоит в создании динамического массива из комплексного типа.
Вот код :
#include <stdio.h>
#include <complex.h>
int main()
{
    double complex z1 = 1.0 + 3.0 * I;
    double complex z2 = 1.0 - 4.0 * I;
}

VS пишет что не хватает ; после z1 , z2.
  • Вопрос задан
  • 219 просмотров
Пригласить эксперта
Ответы на вопрос 4
@res2001
Developer, ex-admin
В VS куцая реализация комплексных чисел.
Там нет реализации типа complex и нет полноценного понятия "i".

Из-за этого вы не можете объявлять и инициализировать комплексные числа так как в вашем примере (и в стандарте).
Для инициализации комплексных чисел можно использовать макросы: _FCbuild(re, im)/_CBuild(re,im)
приставка F - для float, С - для double.
Само по себе комплексное число объявлено так: double _Val[2];
И другие варианты для float и long double.

Нет реализации встроенных операций (+-*/), т.е. нельзя написать z1 + z2 - будет ошибка компиляции.
Для умножения реализована функция, остальные операции реализуйте самостоятельно.
Но в библиотеке есть набор математических функций для комплексного аргумента, что уже хорошо.

Фактически, вы можете не использовать предлагаемый микрософтом тип _C_float_complex (или аналоги), а использовать более понятную собственную реализацию, например такую как предложил Павел Математические библиотечные функции буду с ней работать нормально (при определенных условиях), только нужно будет постоянно приводить типы.

В общем открывайте complex.h из состава VS и изучайте, он достаточно простой.

PS: В gcc полная реализация в соответствии со стандартом.
Ответ написан
jcmvbkbc
@jcmvbkbc
http://dilbert.com/strip/1998-08-24
VS пишет...

в С89 нет complex.h, он появился в C99. VS не поддерживает С99. Следовательно complex.h который у тебя есть -- нестандартный. Надо смотреть в него, чтобы понять, как его использовать.
(Подозреваю, что надо выкинуть слово double из определений переменных).
Ответ написан
@HEKOT
Embedded
даже не знал, что комплексные числа поддерживаются. Всегда использовал
typedef struct {
  float re;
  float im;
} comp, *pcomp
Ответ написан
Papayaved
@Papayaved
ПЛИС, микроконтроллеры
На Си надо самому упаковать комплексное число в структуру и писать функции которые будет использоваться, заодно можно применить более быстрые, или оптимизированные под процессор, алгоритмы
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы