std::proj(std::complex)
Определено в заголовочном файле <complex> | ||
|---|---|---|
template< class T > std::complex<T> proj( const std::complex<T>& z ); | (1) | (начиная с C++11) |
| Дополнительные перегрузки (начиная с C++11) | ||
Определено в заголовочном файле <complex> | ||
std::complex<float> proj( float f ); std::complex<double> proj( double f ); std::complex<long double> proj( long double f ); | (A) | (до C++23) |
template< class FloatingPoint > std::complex<FloatingPoint> proj( FloatingPoint f ); | (начиная с C++23) | |
template< class Integer > std::complex<double> proj( Integer i ); | (B) |
Для большинства
z, std::proj(z) == z, но все комплексные бесконечности, даже числа, у которых одна компонента бесконечна, а другая — NaN, становятся положительной вещественной бесконечностью, (INFINITY, 0.0) или (INFINITY, -0.0). Знак мнимой (нулевой) компоненты совпадает со знаком std::imag(z).
A,B) Дополнительные перегрузки предоставляются для всех целочисленных типов и типов с плавающей запятой; они рассматриваются как комплексные числа с положительной нулевой мнимой компонентой.
Параметры
| z | - | комплексное значение |
| f | - | значение с плавающей запятой |
| i | - | целочисленное значение |
Возвращаемое значение
1) Проекция
z на сферу Римана.
A) Проекция
std::complex(f) на сферу Римана.
B) Проекция
std::complex<double>(i) на сферу Римана.Примечания
Функция proj помогает моделировать сферу Римана, отображая все бесконечности в одну (с учётом знака мнимого нуля), и её следует использовать непосредственно перед любой операцией, особенно сравнением, которая может дать ошибочные результаты для любой другой бесконечности.
Дополнительные перегрузки не обязательно должны быть предоставлены в точности как (A,B). Достаточно, чтобы они обеспечивали следующее для аргумента num:
- Если
numимеет стандартный(до C++23) тип с плавающей запятойT, тоstd::proj(num)имеет тот же эффект, что иstd::proj(std::complex<T>(num)). - В противном случае, если
numимеет целочисленный тип, тоstd::proj(num)имеет тот же эффект, что иstd::proj(std::complex<double>(num)).
Пример
#include <complex>
#include <iostream>
int main()
{
std::complex<double> c1(1, 2);
std::cout << "proj" << c1 << " = " << std::proj(c1) << '\n';
std::complex<double> c2(INFINITY, -1);
std::cout << "proj" << c2 << " = " << std::proj(c2) << '\n';
std::complex<double> c3(0, -INFINITY);
std::cout << "proj" << c3 << " = " << std::proj(c3) << '\n';
}
Вывод:
proj(1,2) = (1,2) proj(inf,-1) = (inf,-0) proj(0,-inf) = (inf,-0)
См. также
| возвращает модуль комплексного числа (шаблон функции) |
|
| возвращает квадрат модуля (шаблон функции) |
|
| создаёт комплексное число по модулю и фазовому углу (шаблон функции) |
|
Документация по C для cproj |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/numeric/complex/proj