Задать вопрос

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

У меня проблема с созданием комплексного числа в языке си. В Си есть библиотека 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.
  • Вопрос задан
  • 4704 просмотра
Подписаться 3 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 3
@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
"I'm here to consult you" © Dogbert
VS пишет...

в С89 нет complex.h, он появился в C99. VS не поддерживает С99. Следовательно complex.h который у тебя есть -- нестандартный. Надо смотреть в него, чтобы понять, как его использовать.
(Подозреваю, что надо выкинуть слово double из определений переменных).
Ответ написан
Комментировать
Papayaved
@Papayaved
FPGA, MCU
На Си надо самому упаковать комплексное число в структуру и писать функции которые будет использоваться, заодно можно применить более быстрые, или оптимизированные под процессор, алгоритмы
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы