Namespaces
Variants

Complex number arithmetic

From cppreference.net

Si la macro constante __STDC_NO_COMPLEX__ est définie par l'implémentation, les types complexes, l'en-tête <complex.h> et tous les noms listés ici ne sont pas fournis.

(depuis C11)

Le langage de programmation C, à partir de C99, prend en charge les calculs sur les nombres complexes avec les trois types intégrés double _Complex , float _Complex , et long double _Complex (voir _Complex ). Lorsque l'en-tête <complex.h> est inclus, les trois types de nombres complexes sont également accessibles sous les noms double complex , float complex , long double complex .

En plus des types complexes, les trois types imaginaires peuvent être pris en charge : double _Imaginary , float _Imaginary , et long double _Imaginary (voir _Imaginary ). Lorsque l'en-tête <complex.h> est inclus, les trois types imaginaires sont également accessibles sous les noms double imaginary , float imaginary , et long double imaginary .

Opérateurs arithmétiques standards + , - , * , / peuvent être utilisés avec les types réels, complexes et imaginaires dans n'importe quelle combinaison.

Un compilateur qui définit __STDC_IEC_559_COMPLEX__ est recommandé, mais n'est pas requis pour prendre en charge les nombres imaginaires. POSIX recommande de vérifier si la macro _Imaginary_I est définie pour identifier la prise en charge des nombres imaginaires.

(depuis C99)
(jusqu'à C11)

Les nombres imaginaires sont pris en charge si __STDC_IEC_559_COMPLEX__ ou __STDC_IEC_60559_COMPLEX__ (depuis C23) est défini.

(depuis C11)
Défini dans l'en-tête <complex.h>

Table des matières

Types
macro de type imaginaire
(macro mot-clé)
(C99)
macro de type complex
(macro mot-clé)
La constante imaginaire
la constante d'unité imaginaire i
(constante macro)
la constante d'unité complexe i
(macro constante)
(C99)
la constante d'unité complexe ou imaginaire i
(macro constante)
Manipulation
(C11) (C11) (C11)
construit un nombre complexe à partir de parties réelle et imaginaire
(macro fonction)
(C99) (C99) (C99)
calcule la partie réelle d'un nombre complexe
(fonction)
(C99) (C99) (C99)
calcule la partie imaginaire d'un nombre complexe
(fonction)
(C99) (C99) (C99)
calcule le module d'un nombre complexe
(fonction)
(C99) (C99) (C99)
calcule l'angle de phase d'un nombre complexe
(fonction)
(C99) (C99) (C99)
calcule le conjugué complexe
(fonction)
(C99) (C99) (C99)
calcule la projection sur la sphère de Riemann
(fonction)
Fonctions exponentielles
(C99) (C99) (C99)
calcule l'exponentielle complexe en base e
(fonction)
(C99) (C99) (C99)
calcule le logarithme naturel complexe
(fonction)
Fonctions de puissance
(C99) (C99) (C99)
calcule la fonction puissance complexe
(fonction)
(C99) (C99) (C99)
calcule la racine carrée complexe
(fonction)
Fonctions trigonométriques
(C99) (C99) (C99)
calcule le sinus complexe
(fonction)
(C99) (C99) (C99)
calcule le cosinus complexe
(fonction)
(C99) (C99) (C99)
calcule la tangente complexe
(fonction)
(C99) (C99) (C99)
calcule l'arc sinus complexe
(fonction)
(C99) (C99) (C99)
calcule l'arc cosinus complexe
(fonction)
(C99) (C99) (C99)
calcule l'arc tangente complexe
(fonction)
Fonctions hyperboliques
(C99) (C99) (C99)
calcule le sinus hyperbolique complexe
(fonction)
(C99) (C99) (C99)
calcule le cosinus hyperbolique complexe
(fonction)
(C99) (C99) (C99)
calcule la tangente hyperbolique complexe
(fonction)
(C99) (C99) (C99)
calcule l'arc sinus hyperbolique complexe
(fonction)
(C99) (C99) (C99)
calcule l'arc cosinus hyperbolique complexe
(fonction)
(C99) (C99) (C99)
calcule l'arc tangente hyperbolique complexe
(fonction)

Notes

Les noms de fonctions suivants sont potentiellement (depuis C23) réservés pour une future addition à <complex.h> et ne sont pas disponibles pour une utilisation dans les programmes qui incluent cet en-tête : cerf , cerfc , cexp2 , cexpm1 , clog10 , clog1p , clog2 , clgamma , ctgamma , csinpi , ccospi , ctanpi , casinpi , cacospi , catanpi , ccompoundn , cpown , cpowr , crootn , crsqrt , cexp10m1 , cexp10 , cexp2m1 , clog10p1 , clog2p1 , clogp1 (depuis C23) , ainsi que leurs variantes suffixées par - f et - l .

Bien que la norme C nomme les fonctions hyperboliques inverses avec « sinus hyperbolique complexe arc » etc., les fonctions inverses des fonctions hyperboliques sont les fonctions d'aire. Leur argument est l'aire d'un secteur hyperbolique, pas un arc. Les noms corrects sont « sinus hyperbolique complexe inverse » etc. Certains auteurs utilisent « sinus hyperbolique complexe d'aire » etc.

Un nombre complexe ou imaginaire est infini si l'une de ses parties est infinie, même si l'autre partie est NaN.

Un nombre complexe ou imaginaire est fini si ses deux parties ne sont ni des infinis ni des NaNs.

Un nombre complexe ou imaginaire est nul si les deux parties sont des zéros positifs ou négatifs.

Bien que MSVC fournisse un en-tête <complex.h> , il n'implémente pas les nombres complexes comme des types natifs, mais comme des struct , qui sont incompatibles avec les types complexes standard du C et ne prennent pas en charge les opérateurs + , - , * , / .

Exemple

#include <complex.h>
#include <stdio.h>
#include <tgmath.h>
int main(void)
{
    double complex z1 = I * I;     // unité imaginaire au carré
    printf("I * I = %.1f%+.1fi\n", creal(z1), cimag(z1));
    double complex z2 = pow(I, 2); // unité imaginaire au carré
    printf("pow(I, 2) = %.1f%+.1fi\n", creal(z2), cimag(z2));
    double PI = acos(-1);
    double complex z3 = exp(I * PI); // formule d'Euler
    printf("exp(I*PI) = %.1f%+.1fi\n", creal(z3), cimag(z3));
    double complex z4 = 1 + 2 * I, z5 = 1 - 2 * I; // conjugués
    printf("(1+2i)*(1-2i) = %.1f%+.1fi\n", creal(z4 * z5), cimag(z4 * z5));
}

Sortie :

I * I = -1.0+0.0i
pow(I, 2) = -1.0+0.0i
exp(I*PI) = -1.0+0.0i
(1+2i)*(1-2i) = 5.0+0.0i

Références

Contenu étendu
  • Norme C23 (ISO/CEI 9899:2024) :
  • 6.10.8.3/1/2 __STDC_NO_COMPLEX__ (p: TBD)
  • 6.10.8.3/1/2 __STDC_IEC_559_COMPLEX__ (p: TBD)
  • 7.3 Arithmétique complexe <complex.h> (p: TBD)
  • 7.25 Mathématiques génériques <tgmath.h> (p: TBD)
  • 7.31.1 Arithmétique complexe <complex.h> (p: TBD)
  • Annexe G (normative) Arithmétique complexe compatible CEI 60559 (p: TBD)
  • Norme C17 (ISO/CEI 9899:2018) :
  • 6.10.8.3/1/2 __STDC_NO_COMPLEX__ (p: 128)
  • 6.10.8.3/1/2 __STDC_IEC_559_COMPLEX__ (p: 128)
  • 7.3 Arithmétique complexe <complex.h> (p: 136-144)
  • 7.25 Mathématiques génériques <tgmath.h> (p: 272-273)
  • 7.31.1 Arithmétique complexe <complex.h> (p: 391)
  • Annexe G (normative) Arithmétique complexe compatible CEI 60559 (p: 469-479)
  • Norme C11 (ISO/CEI 9899:2011) :
  • 6.10.8.3/1/2 __STDC_NO_COMPLEX__ (p: 177)
  • 6.10.8.3/1/2 __STDC_IEC_559_COMPLEX__ (p: 177)
  • 7.3 Arithmétique complexe <complex.h> (p: 188-199)
  • 7.25 Mathématiques génériques <tgmath.h> (p: 373-375)
  • 7.31.1 Arithmétique complexe <complex.h> (p: 455)
  • Annexe G (normative) Arithmétique complexe compatible CEI 60559 (p: 532-545)
  • Norme C99 (ISO/CEI 9899:1999) :
  • 6.10.8/2 __STDC_IEC_559_COMPLEX__ (p: 161)
  • 7.3 Arithmétique complexe <complex.h> (p: 170-180)
  • 7.22 Mathématiques génériques <tgmath.h> (p: 335-337)
  • 7.26.1 Arithmétique complexe <complex.h> (p: 401)
  • Annexe G (informative) Arithmétique complexe compatible CEI 60559 (p: 467-480)

Voir aussi

Documentation C++ pour Arithmétique des nombres complexes