Spec-Zone.ru › C++

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)
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) на сферу Римана.
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)

См. также

abs(std::complex)
возвращает модуль комплексного числа
(шаблон функции)
norm
возвращает квадрат модуля
(шаблон функции)
polar
создаёт комплексное число по модулю и фазовому углу
(шаблон функции)
Документация по C для cproj

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/numeric/complex/proj

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API