cprojf, cproj, cprojl

< c‎ | numeric‎ | complex

C
 Language headers Type support Dynamic memory management Error handling Program utilities Variadic function support Date and time utilities Strings library Algorithms Numerics Input/output support Localization support Thread support (C11) Atomic operations (C11) Technical Specifications

Complex number arithmetic
Types and the imaginary constant
Manipulation
 cabs conj cproj
Power and exponential functions
Trigonometric functions
Hyperbolic functions

 Defined in header `` float       cprojf( float complex z ); (1) (since C99) double      cproj( double complex z ); (2) (since C99) long double cprojl( long double complex z ); (3) (since C99) Defined in header `` #define cproj( z ) (4) (since C99)
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`, std::proj(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).

Contents

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

• C11 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)
• C99 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)