C++ комплексные числа, какой правильный формат?

Я хочу использовать С++ со сложными числами. Поэтому я включил #include <complex>. Теперь я задаю вопрос: как объявить переменную? (Так что же называется форматом let say: 1 + i?)

Заранее спасибо: -)

Ответы

Ответ 1

// 1 + 2i
std::complex<double> c(1, 2);

Ответ 2

Конструктор std::complex имеет два параметра:

  • Первый, у которого есть действительная часть числа.
  • Вторая, у которой есть мнимая часть числа.

Например:

std::complex<float> my_complex(1,1); //1 + 1i 

Кроме того, С++ 11 представляет пользовательские литералы, которые позволяют нам реализовать (или быть реализованы стандартной библиотекой, как в этом С++ 14 принятое предложение) литерал для простых в использовании комплексных номеров:

constexpr std::complex<float> operator"" i(float d)
{
    return std::complex<float>{0.0L,static_cast<float>( d )};
}

Вы можете использовать это следующим образом:

auto my_complex = 1i; // 0 + 1i

Ответ 3

Попробуйте следующее:

#include <complex>
#include <iostream>
using namespace std;
int main()
{
    complex<double> a = {1,2};
    complex<double> b(3,4);

    cout << a + b << "\n";
}

Ответ 4

Вы определяете переменную, указав параметр шаблона и указав имя для переменной, примерно как в большинстве других шаблонов:

std::complex<double> x(1, 1);

Первым параметром для ctor является действительная часть, вторая - мнимая часть.

Начиная с С++ 14, добавлен пользовательский оператор литерала, поэтому вы можете инициализировать сложную переменную с несколько более естественным обозначением:

using namespace std::literals;

std::complex<double> c = 1.2 + 3.4i;

В этом случае (очевидно, достаточно) 1.2 - действительная часть, а 3.4 - мнимая часть.