Namespaces
Variants

std:: proj (std::complex)

From cppreference.net
Definiert im Header <complex>
template < class T >
std:: complex < T > proj ( const std:: complex < T > & z ) ;
(1) (seit C++11)
Definiert im Header <complex>
(A)
std:: complex < float > proj ( float f ) ;

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

std:: complex < long double > proj ( long double f ) ;
(bis C++23)
template < class FloatingPoint >
std:: complex < FloatingPoint > proj ( FloatingPoint f ) ;
(seit C++23)
template < class Integer >
std:: complex < double > proj ( Integer i ) ;
(B)
1) Gibt die Projektion der komplexen Zahl z auf die Riemann-Kugel zurück.
Für die meisten z gilt std :: proj ( z ) == z , aber alle komplexen Unendlichkeiten, selbst Zahlen mit einer unendlichen Komponente und NaN in der anderen, werden zu positiver reeller Unendlichkeit, ( INFINITY , 0.0 ) oder ( INFINITY , - 0.0 ) . Das Vorzeichen der imaginären (Null-)Komponente ist das Vorzeichen von std:: imag ( z ) .
A,B) Für alle Ganzzahl- und Gleitkommatypen werden zusätzliche Überladungen bereitgestellt, die als komplexe Zahlen mit positiver Null-Imaginärkomponente behandelt werden.

Inhaltsverzeichnis

Parameter

z - komplexer Wert
f - Fließkommawert
i - Ganzzahlwert

Rückgabewert

1) Die Projektion von z auf die Riemannsche Zahlenkugel.
A) Die Projektion von std:: complex ( f ) auf die Riemannsche Zahlenkugel.
B) Die Projektion von std:: complex < double > ( i ) auf die Riemannsche Zahlenkugel.

Hinweise

Die proj -Funktion hilft bei der Modellierung der Riemannschen Zahlenkugel, indem sie alle Unendlichkeiten auf eins abbildet (bis auf das Vorzeichen der imaginären Null), und sollte unmittelbar vor jeder Operation verwendet werden, insbesondere bei Vergleichen, die fehlerhafte Ergebnisse für eine der anderen Unendlichkeiten liefern könnten.

Die zusätzlichen Überladungen müssen nicht exakt als (A,B) bereitgestellt werden. Sie müssen lediglich ausreichend sein, um sicherzustellen, dass für ihr Argument num :

  • Wenn num einen Standard (bis C++23) Gleitkommatyp T hat, dann hat std :: proj ( num ) dieselbe Wirkung wie std :: proj ( std:: complex < T > ( num ) ) .
  • Andernfalls, wenn num einen Ganzzahltyp hat, dann hat std :: proj ( num ) dieselbe Wirkung wie std :: proj ( std:: complex < double > ( num ) ) .

Beispiel

#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';
}

Ausgabe:

proj(1,2) = (1,2)
proj(inf,-1) = (inf,-0)
proj(0,-inf) = (inf,-0)

Siehe auch

gibt den Betrag einer komplexen Zahl zurück
(Funktionstemplate)
gibt den quadrierten Betrag zurück
(Funktionstemplate)
erstellt eine komplexe Zahl aus Betrag und Phasenwinkel
(Funktionstemplate)