I
|
Definiert in Header
<complex.h>
|
||
|
#define I /* unspecified */
|
(seit C99) | |
Das
I
Makro expandiert entweder zu
_Complex_I
oder
_Imaginary_I
. Wenn die Implementierung keine imaginären Typen unterstützt, dann expandiert das Makro immer zu
_Complex_I
.
Ein Programm kann das Makro I undefinieren und möglicherweise anschließend neu definieren.
Inhaltsverzeichnis |
Hinweise
Das Makro ist nicht
i
benannt, was der Name der imaginären Einheit in der Mathematik ist, weil der Name
i
bereits in vielen C-Programmen verwendet wurde, z.B. als Schleifenzählervariable.
Das Makro
I
wird häufig zur Bildung komplexer Zahlen verwendet, mit Ausdrücken wie
x
+
y
*
I
.
Wenn
I
als
_Complex_I
definiert ist, kann ein solcher Ausdruck einen Wert mit Imaginärteil
+0.0
erzeugen, selbst wenn
y
gleich
-0.0
ist, was für komplexe Zahlenfunktionen mit Verzweigungsschnitten signifikant ist. Das Makro
CMPLX
bietet eine Möglichkeit, eine komplexe Zahl präzise zu konstruieren.
GCC bietet eine nicht-portable Erweiterung, die es erlaubt, imaginäre Konstanten mit dem Suffix
i
auf Ganzzahl-Literalen zu spezifizieren:
1.0fi
,
1.0i
, und
1.0li
sind imaginäre Einheiten in GNU C. Ein ähnlicher Ansatz ist Teil des Standard-C++ ab C++14 (
1.0if
,
1.0i
, und
1.0il
sind die imaginären Einheiten in C++)
Beispiel
#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)); }
Ausgabe:
I = 0.0+1.0i I * I = -1.0+0.0i z = 1.0+2.0i
Referenzen
- C11-Standard (ISO/IEC 9899:2011):
-
- 7.3.1/6 I (S. 188)
-
- G.6/1 I (S. 537)
- C99-Standard (ISO/IEC 9899:1999):
-
- 7.3.1/4 I (S. 170)
-
- G.6/1 I (S. 472)
Siehe auch
|
(C99)
|
die imaginäre Einheitskonstante i
(Makrokonstante) |
|
(C99)
|
die komplexe Einheitskonstante i
(Makrokonstante) |
|
(C11)
(C11)
(C11)
|
konstruiert eine komplexe Zahl aus Real- und Imaginärteil
(Funktionsmakro) |
|
C++-Dokumentation
für
operator""i
|
|