# I

< c‎ | numeric‎ | complex

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

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

 Defined in header  #define I /* unspecified */ (since C99)

The I macro expands to either _Complex_I or _Imaginary_I. If the implementation does not support imaginary types, then the macro always expands to _Complex_I.

A program may undefine and perhaps then redefine the macro I.

## Contents

### Notes

The macro is not named i, which is the name of the imaginary unit in mathematics, because the name i was already used in many C programs, e.g. as a loop counter variable.

The macro I is often used to form complex numbers, with expressions such as x + y*I. If I is defined as _Complex_I, then such expression may create a value with imaginary component +0.0 even when y is -0.0, which is significant for complex number functions with branch cuts. The macro CMPLX provides a way to construct a complex number precisely.

GCC provides a non-portable extension that allows imaginary constants to be specified with the suffix i on integer literals: 1.0fi, 1.0i, and 1.0li are imaginary units in GNU C. A similar approach is part of standard C++ as of C++14 (1.0if, 1.0i, and 1.0il are the imaginary units in C++)

### Example

#include <stdio.h>
#include <complex.h>

int main(void)
{
printf("I = %.1f%+.1fi\n", creal(I), cimag(I));

double complex z1 = I * I;     // imaginary unit squared
printf("I * I = %.1f%+.1fi\n", creal(z1), cimag(z1));

double complex z = 1.0 + 2.0*I; // usual way to form a complex number pre-C11
printf("z = %.1f%+.1fi\n", creal(z), cimag(z));
}

Output:

I = 0.0+1.0i
I * I = -1.0+0.0i
z = 1.0+2.0i

### References

• C11 standard (ISO/IEC 9899:2011):
• 7.3.1/6 I (p: 188)
• G.6/1 I (p: 537)
• C99 standard (ISO/IEC 9899:1999):
• 7.3.1/4 I (p: 170)
• G.6/1 I (p: 472)