Namespaces
Variants

std:: proj (std::complex)

From cppreference.net
Определено в заголовке <complex>
template < class T >
std:: complex < T > proj ( const std:: complex < T > & z ) ;
(1) (начиная с C++11)
Определено в заголовке <complex>
(A)
std:: complex < float > proj ( float f ) ;

std:: complex < double > proj ( double f ) ;

std:: complex < long double > proj ( long double f ) ;
(до C++23)
template < class FloatingPoint >
std:: complex < FloatingPoint > proj ( FloatingPoint f ) ;
(начиная с C++23)
template < class Integer >
std:: complex < double > proj ( Integer i ) ;
(B)
1) Возвращает проекцию комплексного числа z на сферу Римана .
Для большинства 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 ) на сферу Римана.
Б) Проекция 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)

Смотрите также

возвращает модуль комплексного числа
(шаблон функции)
возвращает квадрат модуля
(шаблон функции)
создаёт комплексное число из модуля и фазового угла
(шаблон функции)