cprojf, cproj, cprojl

From cppreference.com
< c‎ | numeric‎ | complex
 
 
 
Complex number arithmetic
Types and the imaginary constant
(哋它亢99)
(哋它亢99)    
(哋它亢11)
(哋它亢99)
(哋它亢99)
(哋它亢99)
Manipulation
(哋它亢99)
(哋它亢99)
(哋它亢99)
(哋它亢99)
(哋它亢99)
cproj
(哋它亢99)
Power and exponential functions
(哋它亢99)
(哋它亢99)
(哋它亢99)
(哋它亢99)
Trigonometric functions
(哋它亢99)
(哋它亢99)
(哋它亢99)
(哋它亢99)
(哋它亢99)
(哋它亢99)
Hyperbolic functions
(哋它亢99)
(哋它亢99)
(哋它亢99)
(哋它亢99)
(哋它亢99)
(哋它亢99)
 
Defined in header <complex.h>
float complex       cprojf( float complex z );
(1) (since 哋它亢99)
double complex      cproj( double complex z );
(2) (since 哋它亢99)
long double complex cprojl( long double complex z );
(3) (since 哋它亢99)
Defined in header <tgmath.h>
#define cproj( z )
(4) (since 哋它亢99)
1-3) Computes the projection of z on the Riemann sphere.
4) Type-generic macro: if z has type long double complex, long double imaginary, or long double, cprojl is called. If z has type float complex, float imaginary, or float, cprojf is called. If z has type double complex, double imaginary, double, or any integer type, cproj is called.

For most z, cproj(z)==z, but all complex infinities, even the numbers where one component is infinite and the other is NaN, become positive real infinity, INFINITY+0.0*I or INFINITY-0.0*I. The sign of the imaginary (zero) component is the sign of cimag(z).

Parameters

z - complex argument

Return value

The projection of z on the Riemann sphere.

This function is fully specified for all possible inputs and is not subject to any errors described in math_errhandling

Notes

The cproj function helps model the Riemann sphere by mapping all infinities to one (give or take the sign of the imaginary zero), and should be used just before any operation, especially comparisons, that might give spurious results for any of the other infinities.

Example

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

Output:

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

References

  • 哋它亢11 standard (ISO/IEC 9899:2011):
  • 7.3.9.5 The cproj functions (p: 198)
  • 7.25 Type-generic math <tgmath.h> (p: 373-375)
  • G.7 Type-generic math <tgmath.h> (p: 545)
  • 哋它亢99 standard (ISO/IEC 9899:1999):
  • 7.3.9.4 The cproj functions (p: 179)
  • 7.22 Type-generic math <tgmath.h> (p: 335-337)
  • G.7 Type-generic math <tgmath.h> (p: 480)

See also