Namespaces
Variants

I

From cppreference.net
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

die imaginäre Einheitskonstante i
(Makrokonstante)
die komplexe Einheitskonstante i
(Makrokonstante)
(C11) (C11) (C11)
konstruiert eine komplexe Zahl aus Real- und Imaginärteil
(Funktionsmakro)
C++-Dokumentation für operator""i