Namensräume
Varianten
Aktionen

std::proj(std::complex)

Von cppreference.com
< cpp‎ | numeric‎ | complex
 
 
 
 
Definiert in der Header-Datei <complex>
template< class T >
std::complex<T> proj( const std::complex<T>& z );
(1) (seit C++11)
Definiert in der Header-Datei <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 Riemannsche Zahlenkugel zurück.
Für die meisten z gilt std::proj(z) == z, aber alle komplexen Unendlichkeiten, einschließlich der Zahlen, bei denen eine Komponente unendlich und die andere NaN ist, 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) Zusätzliche Überladungen für alle ganzzahligen und Gleitkommatypen werden bereitgestellt. Diese werden als komplexe Zahlen mit positiver reeller Null als Imaginärteil behandelt.

Inhalt

[edit] Parameter

z - komplexer Wert
f - Gleitkommawert
i - ganzzahliger Wert

[edit] 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.

[edit] Anmerkungen

Die Funktion proj hilft bei der Modellierung der Riemannschen Zahlenkugel, indem sie alle Unendlichkeiten auf eine einzige (bis auf das Vorzeichen des imaginären Nullteils) abbildet. Sie sollte unmittelbar vor Operationen, insbesondere Vergleichen, verwendet werden, die bei anderen Unendlichkeiten zu fehlerhaften Ergebnissen führen könnten.

Die zusätzlichen Überladungen müssen nicht exakt wie in (A,B) angegeben bereitgestellt werden. Sie müssen nur ausreichen, um sicherzustellen, dass für ihr Argument num

  • Wenn num einen Standard(bis C++23) Gleitkommatyp T hat, dann hat std::proj(num) denselben Effekt wie std::proj(std::complex<T>(num)).
  • Andernfalls, wenn num einen ganzzahligen Typ hat, dann hat std::proj(num) denselben Effekt wie std::proj(std::complex<double>(num)).

[edit] 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)

[edit] Siehe auch

gibt den Betrag einer komplexen Zahl zurück
(function template) [edit]
gibt das Quadrat des Betrags zurück
(function template) [edit]
konstruiert eine komplexe Zahl aus Betrag und Phasenwinkel
(function template) [edit]
C-Dokumentation für cproj