I
|
Definido en el encabezado
<complex.h>
|
||
|
#define I /* no especificado */
|
(desde C99) | |
La macro
I
se expande a
_Complex_I
o a
_Imaginary_I
. Si la implementación no soporta tipos imaginarios, entonces la macro siempre se expande a
_Complex_I
.
Un programa puede anular la definición y quizás luego redefinir la macro I .
Contenidos |
Notas
La macro no se denomina
i
, que es el nombre de la unidad imaginaria en matemáticas, porque el nombre
i
ya se utilizaba en muchos programas C, por ejemplo como variable contadora de bucles.
La macro
I
se utiliza frecuentemente para formar números complejos, con expresiones como
x
+
y
*
I
.
Si
I
está definida como
_Complex_I
, entonces dicha expresión puede crear un valor con componente imaginario
+0.0
incluso cuando
y
es
-0.0
, lo cual es significativo para funciones de números complejos con cortes de rama. La macro
CMPLX
proporciona una forma de construir un número complejo con precisión.
GCC proporciona una extensión no portable que permite especificar constantes imaginarias con el sufijo
i
en literales enteros:
1.0fi
,
1.0i
, y
1.0li
son unidades imaginarias en GNU C. Un enfoque similar es parte del estándar C++ a partir de C++14 (
1.0if
,
1.0i
, y
1.0il
son las unidades imaginarias en C++)
Ejemplo
#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)); }
Salida:
I = 0.0+1.0i I * I = -1.0+0.0i z = 1.0+2.0i
Referencias
- Estándar C11 (ISO/IEC 9899:2011):
-
- 7.3.1/6 I (p: 188)
-
- G.6/1 I (p: 537)
- Estándar C99 (ISO/IEC 9899:1999):
-
- 7.3.1/4 I (p: 170)
-
- G.6/1 I (p: 472)
Véase también
|
(C99)
|
la constante de unidad imaginaria i
(macro constante) |
|
(C99)
|
la constante de unidad compleja i
(macro constante) |
|
(C11)
(C11)
(C11)
|
construye un número complejo a partir de partes real e imaginaria
(macro función) |
|
Documentación de C++
para
operator""i
|
|