Операции над комплексными числами. Создание, копирование и присваивание комплексных чисел

   
На этом шаге мы рассмотрим методы, создающие комплексное число.

   
В таблице 1 перечислены конструкторы и операции присваивания для типа complex. Конструкторам могут передаваться исходные значения вещественной и
мнимой частей. Если значения не заданы, они инициализируются конструктором по умолчанию для соответствующего типа.

Таблица 1. Конструкторы и операции присваивания класса complex<>

ВыражениеЭффект
complex сСоздает комплексное число с нулевой вещественной и мнимой частями (0+0i)
complex c(1.3)Создает комплексное число с вещественной частью 1.3 и нулевой мнимой частью (1.3+0i)
complex c(1.3, 2.4) Создает комплексное число с вещественной частью 1.3 и мнимой частью 2.4 (1.3+2.4i)
complex c1(c2)Создает комплексное число c1 как копию с2
polar(4.2)Создает временное комплексное число по полярным координатам (амплитуда = 4.2, фазовый угол = 0)
polar(4.2, 0.75)Создает временное комплексное число по полярным координатам (амплитуда = 4.2, фазовый угол = 0.75)
conj(c)Создает временное комплексное число, сопряженное с числом с (то есть комплексное число с противоположным знаком мнимой части)
c1 = с2Присваивает c1 вещественную и мнимую части с2
c1 += С2Прибавляет с2 к c1
c1 -= c2Вычитает с2 из c1
c1 *= с2Умножает c1 на с2
c1 /= с2Делит c1 на с2

   
Значение существующего комплексного числа может быть изменено только при помощи операторов присваивания. Комбинированные операторы присваивания
+=, -=, *= и /= осуществляют суммирование, вычитание, умножение и деление значений двух комплексных операндов.

   
Вспомогательная функция polar() позволяет создать комплексное число, инициализируемое в полярных координатах (через амплитуду и фазовый угол,
указанный в радианах):

  // Создание комплексного числа с инициализацией в полярных координатах 
  std::complex<double> c2(std::polar(4.2.0.75));

   
Если в создании комплексного числа задействовано неявное преобразование типа, возникает проблема. Например, следующее решение работает нормально:

  std::complex<float> c2(std::polar(4.2,0.75)); // OК

   
Однако похожая запись со знаком равенства ошибочна:

  std::complex<float> c2 = std::polar(4.2.0.75); // ОШИБКА

   
Эта проблема рассматривается далее.

   
Вспомогательная функция conj() позволяет создать комплексное число, инициализированное значением, сопряженным с другим комплексным числом (то
есть комплексным числом с противоположным знаком мнимой части):

  std::complex<double> с1(1.1,5.5);
  std::complex<double> c2(conj(c1)); // c2 инициализируется как
                                     // complex<double>(l.1,-5.5)

   
На следующем шаге мы рассмотрим неявные преобразования типов.



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий