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>
(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) на сферу Римана.
B) Проекция std::complex<double>(i) на сферу Римана.

Примечания

Функция proj помогает смоделировать сферу Римана, отображая все бесконечности в одну (с учетом знака мнимой нулевой), и должна использоваться непосредственно перед любой операцией, особенно сравнениями, которые могут давать ложные результаты для любой из других бесконечностей.

Дополнительные перегрузки не обязаны предоставляться точно так, как (A,B). Они должны быть достаточными для обеспечения того, что для их аргумента num:

  • Если num имеет тип с плавающей точкой 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/w/cpp/numeric/complex/proj

Spec-Zone.ru

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