Defined in header `<complex.h>` | ||
---|---|---|

float complex CMPLXF( float real, float imag ); | (since C11) | |

double complex CMPLX( double real, double imag ); | (since C11) | |

long double complex CMPLXL( long double real, long double imag ); | (since C11) |

Each of these macros expands to an expression that evaluates to the value of the specified complex type, with the real part having the value of `real`

(converted to the specified argument type) and the imaginary part having the value of `imag`

(converted to the specified argument type).

The expressions are suitable for use as initializers for objects with static or thread storage duration, as long as the expressions `real`

and `imag`

are also suitable.

real | - | the real part of the complex number to return |

imag | - | the imaginary part of the complex number to return |

A complex number composed of `real`

and `imag`

as the real and imaginary parts.

These macros are implemented as if the imaginary types are supported (even if they are otherwise not supported and `_Imaginary_I`

is actually undefined) and as if defined as follows:

#define CMPLX(x, y) ((double complex)((double)(x) + _Imaginary_I * (double)(y))) #define CMPLXF(x, y) ((float complex)((float)(x) + _Imaginary_I * (float)(y))) #define CMPLXL(x, y) ((long double complex)((long double)(x) + \ _Imaginary_I * (long double)(y)))

#include <stdio.h> #include <complex.h> int main(void) { double complex z = CMPLX(0.0, -0.0); printf("z = %.1f%+.1fi\n", creal(z), cimag(z)); }

Output:

z = 0.0-0.0i

- C11 standard (ISO/IEC 9899:2011):
- 7.3.9.3 The CMPLX macros (p: 197)

(C99) | the imaginary unit constant i (macro constant) |

© cppreference.com

Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.

http://en.cppreference.com/w/c/numeric/complex/CMPLX