Namensräume
Varianten
Aktionen

cprojf, cproj, cprojl

Von cppreference.com
< c‎ | numeric‎ | complex
Definiert im Header <complex.h>
float complex       cprojf( float complex z );
(1) (seit C99)
double complex      cproj( double complex z );
(2) (seit C99)
long double complex cprojl( long double complex z );
(3) (seit C99)
Definiert in Header <tgmath.h>
#define cproj( z )
(4) (seit C99)
1-3) Berechnet die Projektion von z auf die Riemannsche Kugel.
4) Typ-generische Makro: Wenn z vom Typ long double complex, long double imaginary oder long double ist, wird cprojl aufgerufen. Wenn z vom Typ float complex, float imaginary oder float ist, wird cprojf aufgerufen. Wenn z vom Typ double complex, double imaginary, double oder einem beliebigen ganzzahligen Typ ist, wird cproj aufgerufen.

Für die meisten z gilt cproj(z)=z, aber alle komplexen Unendlichkeiten, auch die Zahlen, bei denen eine Komponente unendlich und die andere NaN ist, werden zu positiver reeller Unendlichkeit, INFINITY+0.0*I oder INFINITY-0.0*I. Das Vorzeichen der imaginären (Null-)Komponente ist das Vorzeichen von cimag(z).

Inhalt

[bearbeiten] Parameter

z - complex argument

[bearbeiten] Rückgabewert

Die Projektion von z auf die Riemannsche Kugel.

Diese Funktion ist für alle möglichen Eingaben vollständig spezifiziert und unterliegt keinen Fehlern, die in math_errhandling beschrieben sind.

[bearbeiten] Hinweise

Die Funktion cproj hilft bei der Modellierung der Riemannschen Kugel, indem sie alle Unendlichkeiten auf eine einzige (bis auf das Vorzeichen der imaginären Null) abbildet und direkt vor jeder Operation, insbesondere Vergleichen, verwendet werden sollte, die für andere Unendlichkeiten zu fehlerhaften Ergebnissen führen könnten.

[bearbeiten] Beispiel

#include <stdio.h>
#include <complex.h>
#include <math.h>
 
int main(void)
{
    double complex z1 = cproj(1 + 2*I);
    printf("cproj(1+2i) = %.1f%+.1fi\n", creal(z1),cimag(z1));
 
    double complex z2 = cproj(INFINITY+2.0*I);
    printf("cproj(Inf+2i) = %.1f%+.1fi\n", creal(z2),cimag(z2));
 
    double complex z3 = cproj(INFINITY-2.0*I);
    printf("cproj(Inf-2i) = %.1f%+.1fi\n", creal(z3),cimag(z3));
}

Ausgabe

cproj(1+2i) = 1.0+2.0i
cproj(Inf+2i) = inf+0.0i
cproj(Inf-2i) = inf-0.0i

[bearbeiten] Referenzen

  • C11-Standard (ISO/IEC 9899:2011)
  • 7.3.9.5 Die cproj-Funktionen (S. 198)
  • 7.25 Typ-generische Mathematik <tgmath.h> (S. 373-375)
  • G.7 Type-generic math <tgmath.h> (S: 545)
  • C99-Standard (ISO/IEC 9899:1999)
  • 7.3.9.4 Die cproj-Funktionen (S. 179)
  • 7.22 Typ-generische Mathematik <tgmath.h> (S. 335-337)
  • G.7 Type-generic math <tgmath.h> (S: 480)

[bearbeiten] Siehe auch