Пространства имён
Варианты
Действия

std::complex

Материал из cppreference.com
< cpp‎ | numeric
 
 
 
std::complex
Функции-элементы
Функции, не являющиеся элементами
Экспоненциальные функции
Степенные функции
Тригонометрические функции
(C++11)
(C++11)
(C++11)
Гиперболические функции
(C++11)
(C++11)
(C++11)
 
Определено в заголовочном файле <complex>
template<class T >
class complex;
(1)
template<>class complex<float>;
(2) (до C++23)
template<>class complex<double>;
(3) (до C++23)
template<>class complex<longdouble>;
(4) (до C++23)

Специализации std::complex для cv-неквалифицированных стандартных(до C++23)типы с плавающей запятой являются TriviallyCopyable(начиная с C++23) типами LiteralType для представления комплексных чисел и управления ими.

Содержание

[править]Параметры шаблона

T тип действительной и мнимой частей. Поведение не указано (и может не компилироваться), если T не является cv-неквалифицированным стандартным(до C++23) типом с плавающей запятой, и не определено, если T не является NumericType.

[править]Типы элементы

Элемент тип Определение
value_typeT

[править]Функции-элементы

создаёт комплексное число
(public функция-элемент)[править]
присваивает содержимое
(public функция-элемент)[править]
предоставляет доступ к действительной части комплексного числа
(public функция-элемент)[править]
предоставляет доступ к мнимой части комплексного числа
(public функция-элемент)[править]
составное присваивание двух комплексных чисел или комплексного и скалярного чисел
(public функция-элемент)[править]

[править]Функции, не являющиеся элементами

применяет унарные операторы к комплексным числам
(шаблон функции)[править]
выполняет арифметику комплексных чисел над двумя комплексными значениями или комплексным и скалярным значениями
(шаблон функции)[править]
(удалено в C++20)
сравнивает два комплексных числа или комплексное и скалярное числа
(шаблон функции)[править]
сериализует и десериализует комплексное число
(шаблон функции)[править]
возвращает действительную часть
(шаблон функции)[править]
возвращает мнимую часть
(шаблон функции)[править]
возвращает величину комплексного числа
(шаблон функции)[править]
возвращает угол фазы
(шаблон функции)[править]
возвращает квадрат величины
(шаблон функции)[править]
возвращает комплексное сопряжение
(шаблон функции)[править]
(C++11)
возвращает проекцию на сферу Римана
(шаблон функции)[править]
создаёт комплексное число из величины и угла фазы
(шаблон функции)[править]
Экспоненциальные функции
комплексная экспонента по основанию e
(шаблон функции)[править]
комплексный натуральный логарифм с ветвью, обрезанной по отрицательной действительной оси
(шаблон функции)[править]
комплексный десятичный логарифм с ветвью, обрезанной по отрицательной действительной оси
(шаблон функции)[править]
Степенные функции
комплексная степень, один или оба аргумента могут быть комплексным числом
(шаблон функции)[править]
комплексный квадратный корень из диапазона правой полуплоскости
(шаблон функции)[править]
Тригонометрические функции
вычисляет синус комплексного числа (sin(z))
(шаблон функции)[править]
вычисляет косинус комплексного числа (cos(z))
(шаблон функции)[править]
вычисляет тангенс комплексного числа (tan(z))
(шаблон функции)[править]
вычисляет арксинус комплексного числа (arcsin(z))
(шаблон функции)[править]
вычисляет арккосинус комплексного числа (arccos(z))
(шаблон функции)[править]
вычисляет арктангенс комплексного числа (arctan(z))
(шаблон функции)[править]
Гиперболические функции
вычисляет гиперболический синус комплексного числа (sinh(z))
(шаблон функции)[править]
вычисляет гиперболический косинус комплексного числа (cosh(z))
(шаблон функции)[править]
вычисляет гиперболический тангенс комплексного числа (tanh(z))
(шаблон функции)[править]
вычисляет гиперболический синус площади комплексного числа (arsinh(z))
(шаблон функции)[править]
вычисляет гиперболический косинус площади комплексного числа (arcosh(z))
(шаблон функции)[править]
вычисляет гиперболический тангенс площади комплексного числа (artanh(z))
(шаблон функции)[править]

[править]Доступ, ориентированный на массив

Для любого объекта z типа std::complex<T>, reinterpret_cast<T(&)[2]>(z)[0] является действительной частью z и reinterpret_cast<T(&)[2]>(z)[1] мнимой частью z.

Для любого указателя на элемент массива std::complex<T> с именем p и любого допустимого индекса массива i, reinterpret_cast<T*>(p)[2*i] действительная часть комплексного числа p[i], а reinterpret_cast<T*>(p)[2*i +1] мнимая часть комплексного числа p[i].

Целью этого требования является сохранение двоичной совместимости между типами комплексных чисел библиотеки C++ и типами комплексных чисел языка C (и их массивов), которые имеют идентичное требование к представлению объектов.

[править]Замечания по реализации

Чтобы удовлетворить требования доступа, ориентированного на массивы, реализация ограничена хранением действительных и мнимых частей специализации std::complex в отдельных и смежных ячейках памяти. Возможные объявления нестатических элементов данных включают:

  • массив типа value_type[2], где первая часть содержит действительный компонент, а второй элемент мнимая часть (например, Microsoft Visual Studio);
  • единственный элемент типа value_type _Complex (инкапсулирующий соответствующий тип комплексного числа языка C) (например, GNU libstdc++);
  • два элемента типа value_type, с одинаковым доступом к элементам, содержащих соответственно действительная и мнимая часть (например, LLVM libc++).

Реализация не может объявлять дополнительные нестатические элементы данных, которые занимали бы память отдельно от действительной и мнимой частей, и должна гарантировать, что специализация шаблона класса не содержит никаких бит заполнения. Реализация также должна гарантировать, что при оптимизации доступа к массиву учитывается возможность того, что указатель на value_type может быть псевдонимом для специализации std::complex или его массива.

[править]Литералы

Определены в пространстве имён std::literals::complex_literals
литерал std::complex, представляющий чисто мнимое число
(функция)[править]

[править]Примечание

Макрос тест функциональности
__cpp_lib_constexpr_complex201711L(C++20)Constexpr простые комплексные математические функции в <complex>
202306L(C++26)Больше constexpr для <complex>

[править]Пример

#include <cmath>#include <complex>#include <iomanip>#include <iostream>   int main(){usingnamespace std::complex_literals;std::cout<<std::fixed<<std::setprecision(1);   std::complex<double> z1 = 1i * 1i;// мнимая единица в квадратеstd::cout<<"i * i = "<< z1 <<'\n';   std::complex<double> z2 =std::pow(1i, 2);// мнимая единица в квадратеstd::cout<<"pow(i, 2) = "<< z2 <<'\n';   constdouble PI =std::acos(-1);// или std::numbers::pi в C++20 std::complex<double> z3 =std::exp(1i * PI);// формула Эйлераstd::cout<<"exp(i * pi) = "<< z3 <<'\n';   std::complex<double> z4 =1. + 2i, z5 =1. - 2i;// сопряжённые числаstd::cout<<"(1+2i)*(1-2i) = "<< z4*z5 <<'\n';}

Вывод:

i * i = (-1.0,0.0) pow(i, 2) = (-1.0,0.0) exp(i * pi) = (-1.0,0.0) (1+2i)*(1-2i) = (5.0,0.0)

[править]Отчёты о дефектах

Следующие изменения поведения были применены с обратной силой к ранее опубликованным стандартам C++:

Номер Применён Поведение в стандарте Корректное поведение
LWG 387 C++98 Совместимость std::complex с C complex не гарантируется гарантированно совместимы

[править]Смотри также

Документация C по Арифметика комплексных чисел
close