Complex Structure

Définition

Représente un nombre complexe.

public value class Complex : IEquatable<System::Numerics::Complex>, IFormattable
public value class Complex : IEquatable<System::Numerics::Complex>, IParsable<System::Numerics::Complex>, ISpanParsable<System::Numerics::Complex>, IUtf8SpanParsable<System::Numerics::Complex>, System::Numerics::IAdditionOperators<System::Numerics::Complex, System::Numerics::Complex, System::Numerics::Complex>, System::Numerics::IAdditiveIdentity<System::Numerics::Complex, System::Numerics::Complex>, System::Numerics::IDecrementOperators<System::Numerics::Complex>, System::Numerics::IDivisionOperators<System::Numerics::Complex, System::Numerics::Complex, System::Numerics::Complex>, System::Numerics::IEqualityOperators<System::Numerics::Complex, System::Numerics::Complex, bool>, System::Numerics::IIncrementOperators<System::Numerics::Complex>, System::Numerics::IMultiplicativeIdentity<System::Numerics::Complex, System::Numerics::Complex>, System::Numerics::IMultiplyOperators<System::Numerics::Complex, System::Numerics::Complex, System::Numerics::Complex>, System::Numerics::INumberBase<System::Numerics::Complex>, System::Numerics::ISignedNumber<System::Numerics::Complex>, System::Numerics::ISubtractionOperators<System::Numerics::Complex, System::Numerics::Complex, System::Numerics::Complex>, System::Numerics::IUnaryNegationOperators<System::Numerics::Complex, System::Numerics::Complex>, System::Numerics::IUnaryPlusOperators<System::Numerics::Complex, System::Numerics::Complex>
public value class Complex : IEquatable<System::Numerics::Complex>, IParsable<System::Numerics::Complex>, ISpanParsable<System::Numerics::Complex>, System::Numerics::IAdditionOperators<System::Numerics::Complex, System::Numerics::Complex, System::Numerics::Complex>, System::Numerics::IAdditiveIdentity<System::Numerics::Complex, System::Numerics::Complex>, System::Numerics::IDecrementOperators<System::Numerics::Complex>, System::Numerics::IDivisionOperators<System::Numerics::Complex, System::Numerics::Complex, System::Numerics::Complex>, System::Numerics::IEqualityOperators<System::Numerics::Complex, System::Numerics::Complex, bool>, System::Numerics::IIncrementOperators<System::Numerics::Complex>, System::Numerics::IMultiplicativeIdentity<System::Numerics::Complex, System::Numerics::Complex>, System::Numerics::IMultiplyOperators<System::Numerics::Complex, System::Numerics::Complex, System::Numerics::Complex>, System::Numerics::INumberBase<System::Numerics::Complex>, System::Numerics::ISignedNumber<System::Numerics::Complex>, System::Numerics::ISubtractionOperators<System::Numerics::Complex, System::Numerics::Complex, System::Numerics::Complex>, System::Numerics::IUnaryNegationOperators<System::Numerics::Complex, System::Numerics::Complex>, System::Numerics::IUnaryPlusOperators<System::Numerics::Complex, System::Numerics::Complex>
public struct Complex : IEquatable<System.Numerics.Complex>, IFormattable
public readonly struct Complex : IEquatable<System.Numerics.Complex>, IParsable<System.Numerics.Complex>, ISpanParsable<System.Numerics.Complex>, IUtf8SpanParsable<System.Numerics.Complex>, System.Numerics.IAdditionOperators<System.Numerics.Complex,System.Numerics.Complex,System.Numerics.Complex>, System.Numerics.IAdditiveIdentity<System.Numerics.Complex,System.Numerics.Complex>, System.Numerics.IDecrementOperators<System.Numerics.Complex>, System.Numerics.IDivisionOperators<System.Numerics.Complex,System.Numerics.Complex,System.Numerics.Complex>, System.Numerics.IEqualityOperators<System.Numerics.Complex,System.Numerics.Complex,bool>, System.Numerics.IIncrementOperators<System.Numerics.Complex>, System.Numerics.IMultiplicativeIdentity<System.Numerics.Complex,System.Numerics.Complex>, System.Numerics.IMultiplyOperators<System.Numerics.Complex,System.Numerics.Complex,System.Numerics.Complex>, System.Numerics.INumberBase<System.Numerics.Complex>, System.Numerics.ISignedNumber<System.Numerics.Complex>, System.Numerics.ISubtractionOperators<System.Numerics.Complex,System.Numerics.Complex,System.Numerics.Complex>, System.Numerics.IUnaryNegationOperators<System.Numerics.Complex,System.Numerics.Complex>, System.Numerics.IUnaryPlusOperators<System.Numerics.Complex,System.Numerics.Complex>
public readonly struct Complex : IEquatable<System.Numerics.Complex>, IFormattable
public readonly struct Complex : IEquatable<System.Numerics.Complex>, IParsable<System.Numerics.Complex>, ISpanParsable<System.Numerics.Complex>, System.Numerics.IAdditionOperators<System.Numerics.Complex,System.Numerics.Complex,System.Numerics.Complex>, System.Numerics.IAdditiveIdentity<System.Numerics.Complex,System.Numerics.Complex>, System.Numerics.IDecrementOperators<System.Numerics.Complex>, System.Numerics.IDivisionOperators<System.Numerics.Complex,System.Numerics.Complex,System.Numerics.Complex>, System.Numerics.IEqualityOperators<System.Numerics.Complex,System.Numerics.Complex,bool>, System.Numerics.IIncrementOperators<System.Numerics.Complex>, System.Numerics.IMultiplicativeIdentity<System.Numerics.Complex,System.Numerics.Complex>, System.Numerics.IMultiplyOperators<System.Numerics.Complex,System.Numerics.Complex,System.Numerics.Complex>, System.Numerics.INumberBase<System.Numerics.Complex>, System.Numerics.ISignedNumber<System.Numerics.Complex>, System.Numerics.ISubtractionOperators<System.Numerics.Complex,System.Numerics.Complex,System.Numerics.Complex>, System.Numerics.IUnaryNegationOperators<System.Numerics.Complex,System.Numerics.Complex>, System.Numerics.IUnaryPlusOperators<System.Numerics.Complex,System.Numerics.Complex>
[System.Serializable]
public struct Complex : IEquatable<System.Numerics.Complex>, IFormattable
type Complex = struct
    interface IFormattable
type Complex = struct
    interface IFormattable
    interface IParsable<Complex>
    interface ISpanFormattable
    interface ISpanParsable<Complex>
    interface IAdditionOperators<Complex, Complex, Complex>
    interface IAdditiveIdentity<Complex, Complex>
    interface IDecrementOperators<Complex>
    interface IDivisionOperators<Complex, Complex, Complex>
    interface IEqualityOperators<Complex, Complex, bool>
    interface IIncrementOperators<Complex>
    interface IMultiplicativeIdentity<Complex, Complex>
    interface IMultiplyOperators<Complex, Complex, Complex>
    interface INumberBase<Complex>
    interface IUtf8SpanFormattable
    interface IUtf8SpanParsable<Complex>
    interface ISubtractionOperators<Complex, Complex, Complex>
    interface IUnaryNegationOperators<Complex, Complex>
    interface IUnaryPlusOperators<Complex, Complex>
    interface ISignedNumber<Complex>
type Complex = struct
    interface IFormattable
    interface IParsable<Complex>
    interface ISpanFormattable
    interface ISpanParsable<Complex>
    interface IUtf8SpanFormattable
    interface IUtf8SpanParsable<Complex>
    interface IAdditionOperators<Complex, Complex, Complex>
    interface IAdditiveIdentity<Complex, Complex>
    interface IDecrementOperators<Complex>
    interface IDivisionOperators<Complex, Complex, Complex>
    interface IEqualityOperators<Complex, Complex, bool>
    interface IIncrementOperators<Complex>
    interface IMultiplicativeIdentity<Complex, Complex>
    interface IMultiplyOperators<Complex, Complex, Complex>
    interface INumberBase<Complex>
    interface ISubtractionOperators<Complex, Complex, Complex>
    interface IUnaryNegationOperators<Complex, Complex>
    interface IUnaryPlusOperators<Complex, Complex>
    interface ISignedNumber<Complex>
type Complex = struct
    interface IFormattable
    interface IParsable<Complex>
    interface ISpanFormattable
    interface ISpanParsable<Complex>
    interface IAdditionOperators<Complex, Complex, Complex>
    interface IAdditiveIdentity<Complex, Complex>
    interface IDecrementOperators<Complex>
    interface IDivisionOperators<Complex, Complex, Complex>
    interface IEqualityOperators<Complex, Complex, bool>
    interface IIncrementOperators<Complex>
    interface IMultiplicativeIdentity<Complex, Complex>
    interface IMultiplyOperators<Complex, Complex, Complex>
    interface INumberBase<Complex>
    interface ISubtractionOperators<Complex, Complex, Complex>
    interface IUnaryNegationOperators<Complex, Complex>
    interface IUnaryPlusOperators<Complex, Complex>
    interface ISignedNumber<Complex>
type Complex = struct
    interface IFormattable
    interface IParsable<Complex>
    interface ISpanFormattable
    interface ISpanParsable<Complex>
    interface IAdditionOperators<Complex, Complex, Complex>
    interface IAdditiveIdentity<Complex, Complex>
    interface IDecrementOperators<Complex>
    interface IDivisionOperators<Complex, Complex, Complex>
    interface IEqualityOperators<Complex, Complex, bool>
    interface IIncrementOperators<Complex>
    interface IMultiplicativeIdentity<Complex, Complex>
    interface IMultiplyOperators<Complex, Complex, Complex>
    interface INumberBase<Complex>
    interface ISubtractionOperators<Complex, Complex, Complex>
    interface IUnaryNegationOperators<Complex, Complex>
    interface IUnaryPlusOperators<Complex, Complex>
    interface IUtf8SpanFormattable
    interface IUtf8SpanParsable<Complex>
    interface ISignedNumber<Complex>
[<System.Serializable>]
type Complex = struct
    interface IFormattable
Public Structure Complex
Implements IEquatable(Of Complex), IFormattable
Public Structure Complex
Implements IAdditionOperators(Of Complex, Complex, Complex), IAdditiveIdentity(Of Complex, Complex), IDecrementOperators(Of Complex), IDivisionOperators(Of Complex, Complex, Complex), IEqualityOperators(Of Complex, Complex, Boolean), IEquatable(Of Complex), IIncrementOperators(Of Complex), IMultiplicativeIdentity(Of Complex, Complex), IMultiplyOperators(Of Complex, Complex, Complex), INumberBase(Of Complex), IParsable(Of Complex), ISignedNumber(Of Complex), ISpanParsable(Of Complex), ISubtractionOperators(Of Complex, Complex, Complex), IUnaryNegationOperators(Of Complex, Complex), IUnaryPlusOperators(Of Complex, Complex), IUtf8SpanParsable(Of Complex)
Public Structure Complex
Implements IAdditionOperators(Of Complex, Complex, Complex), IAdditiveIdentity(Of Complex, Complex), IDecrementOperators(Of Complex), IDivisionOperators(Of Complex, Complex, Complex), IEqualityOperators(Of Complex, Complex, Boolean), IEquatable(Of Complex), IIncrementOperators(Of Complex), IMultiplicativeIdentity(Of Complex, Complex), IMultiplyOperators(Of Complex, Complex, Complex), INumberBase(Of Complex), IParsable(Of Complex), ISignedNumber(Of Complex), ISpanParsable(Of Complex), ISubtractionOperators(Of Complex, Complex, Complex), IUnaryNegationOperators(Of Complex, Complex), IUnaryPlusOperators(Of Complex, Complex)
Héritage
Complex
Attributs
Implémente

Remarques

Un nombre complexe est un nombre qui comprend une partie numérique réelle et une partie de nombre imaginaire. Un nombre complexe z est généralement écrit sous la forme z = x + yi, où x et y sont des nombres réels, et i est l’unité imaginaire qui a la propriété i2 = -1. La partie réelle du nombre complexe est représentée par x, et la partie imaginaire du nombre complexe est représentée par y.

Le Complex type utilise le système de coordonnées cartesiens (réel, imaginaire) lors de l’instanciation et de la manipulation de nombres complexes. Un nombre complexe peut être représenté comme un point dans un système de coordonnées à deux dimensions, appelé plan complexe. La partie réelle du nombre complexe est positionnée sur l’axe x (l’axe horizontal) et la partie imaginaire est positionnée sur l’axe y (l’axe vertical).

Tout point du plan complexe peut également être exprimé en fonction de sa valeur absolue, à l’aide du système de coordonnées polaires. En coordonnées polaires, un point est caractérisé par deux nombres :

  • Sa magnitude, qui est la distance du point de l’origine (autrement dit, 0,0, ou le point auquel l’axe x et l’axe y se croisent).
  • Sa phase, qui est l’angle entre l’axe réel et la ligne dessinée de l’origine jusqu’au point.

Instancier un nombre complexe

Vous pouvez affecter une valeur à un nombre complexe de l’une des manières suivantes :

  • En passant deux valeurs Double à son constructeur. La première valeur représente la partie réelle du nombre complexe, et la seconde représente sa partie imaginaire. Ces valeurs représentent la position du nombre complexe dans le système de coordonnées cartésien à deux dimensions.

  • En appelant la méthode statique (Shared en Visual Basic) Complex.FromPolarCoordinates pour créer un nombre complexe à partir de ses coordonnées polaires.

  • En affectant un Byte, SByteInt16UInt16, Int32UInt32Int64UInt64Singleou Double valeur à un Complex objet. La valeur devient la partie réelle du nombre complexe, et sa partie imaginaire est égale à 0.

  • En effectuant un transtypage (en C#) ou une conversion (en Visual Basic) d'une valeur de Decimal ou BigInteger en un objet Complex. La valeur devient la partie réelle du nombre complexe, et sa partie imaginaire est égale à 0.

  • En affectant le nombre complexe retourné par une méthode ou un opérateur à un Complex objet. Par exemple, Complex.Add est une méthode statique qui retourne un nombre complexe qui correspond à la somme de deux nombres complexes, et l’opérateur Complex.Addition ajoute deux nombres complexes et retourne le résultat.

L’exemple suivant illustre chacune de ces cinq façons d’affecter une valeur à un nombre complexe.

using System;
using System.Numerics;

public class CreateEx
{
    public static void Run()
    {
        // Create a complex number by calling its class constructor.
        Complex c1 = new Complex(12, 6);
        Console.WriteLine(c1);

        // Assign a Double to a complex number.
        Complex c2 = 3.14;
        Console.WriteLine(c2);

        // Cast a Decimal to a complex number.
        Complex c3 = (Complex)12.3m;
        Console.WriteLine(c3);

        // Assign the return value of a method to a Complex variable.
        Complex c4 = Complex.Pow(Complex.One, -1);
        Console.WriteLine(c4);

        // Assign the value returned by an operator to a Complex variable.
        Complex c5 = Complex.One + Complex.One;
        Console.WriteLine(c5);

        // Instantiate a complex number from its polar coordinates.
        Complex c6 = Complex.FromPolarCoordinates(10, .524);
        Console.WriteLine(c6);
    }
}
// The example displays the following output:
//       (12, 6)
//       (3.14, 0)
//       (12.3, 0)
//       (1, 0)
//       (2, 0)
//       (8.65824721882145, 5.00347430269914)
Imports System.Numerics

Module Example
   Public Sub Run()
      ' Create a complex number by calling its class constructor.
      Dim c1 As New Complex(12, 6)
      Console.WriteLine(c1)
      
      ' Assign a Double to a complex number.
      Dim c2 As Complex = 3.14
      Console.WriteLine(c2)
      
      ' Cast a Decimal to a complex number.
      Dim c3 As Complex = CType(12.3d, Complex)
      Console.WriteLine(c3)
      
      ' Assign the return value of a method to a Complex variable.
      Dim c4 As Complex = Complex.Pow(Complex.One, -1)
      Console.WriteLine(c4)
      
      ' Assign the value returned by an operator to a Complex variable.
      Dim c5 As Complex = Complex.One + Complex.One
      Console.WriteLine(c5)

      ' Instantiate a complex number from its polar coordinates.
      Dim c6 As Complex = Complex.FromPolarCoordinates(10, .524)
      Console.WriteLine(c6)
   End Sub
End Module
' The example displays the following output:
'       (12, 6)
'       (3.14, 0)
'       (12.3000001907349, 0)
'       (1, 0)
'       (2, 0)
'       (8.65824721882145, 5.00347430269914)

Opérations avec des nombres complexes

La Complex structure dans .NET inclut des membres qui fournissent les fonctionnalités suivantes :

  • Méthodes de comparaison de deux nombres complexes pour déterminer s’ils sont égaux.
  • Opérateurs pour effectuer des opérations arithmétiques sur des nombres complexes. Complex les opérateurs vous permettent d’effectuer l’addition, la soustraction, la multiplication, la division et la négation unaire avec des nombres complexes.
  • Méthodes permettant d’effectuer d’autres opérations numériques sur des nombres complexes. En plus des quatre opérations arithmétiques de base, vous pouvez élever un nombre complexe à une puissance spécifiée, trouver la racine carrée d’un nombre complexe et obtenir la valeur absolue d’un nombre complexe.
  • Méthodes pour effectuer des opérations trigonométriques sur des nombres complexes. Par exemple, vous pouvez calculer la tangente d’un angle représenté par un nombre complexe.

Notez que, les propriétés Real et Imaginary étant en lecture seule, vous ne pouvez pas modifier la valeur d’un objet existant Complex. Toutes les méthodes qui effectuent une opération sur un Complex nombre, si leur valeur de retour est de type Complex, retournent un nouveau Complex nombre.

Nombres précis et nombres complexes

Les parties réelles et imaginaires d’un nombre complexe sont représentées par deux valeurs à virgule flottante double précision. Cela signifie que les valeurs Complex, comme les valeurs à virgule flottante de double précision, peuvent perdre de la précision à la suite d'opérations numériques. Cela signifie que les comparaisons strictes pour l’égalité de deux Complex valeurs peuvent échouer, même si la différence entre les deux valeurs est due à une perte de précision. Pour plus d’informations, consultez Double.

Par exemple, l’exponentiation sur le logarithme d’un nombre doit retourner le nombre d’origine. Toutefois, dans certains cas, la perte de précision des valeurs à virgule flottante peut entraîner de légères différences entre les deux valeurs, comme l’illustre l’exemple suivant.

Complex value = new Complex(Double.MinValue / 2, Double.MinValue / 2);
Complex value2 = Complex.Exp(Complex.Log(value));
Console.WriteLine($"{value} \n{value2} \nEqual: {value == value2}");
// The example displays the following output:
//    (-8.98846567431158E+307, -8.98846567431158E+307)
//    (-8.98846567431161E+307, -8.98846567431161E+307)
//    Equal: False
Dim value As New Complex(Double.MinValue / 2, Double.MinValue / 2)
Dim value2 As Complex = Complex.Exp(Complex.Log(value))
Console.WriteLine("{0} {3}{1} {3}Equal: {2}", value, value2,
                                              value = value2,
                                              vbCrLf)
' The example displays the following output:
'    (-8.98846567431158E+307, -8.98846567431158E+307)
'    (-8.98846567431161E+307, -8.98846567431161E+307)
'    Equal: False

De même, l’exemple suivant, qui calcule la racine carrée d’un Complex nombre, produit des résultats légèrement différents sur les versions 32 bits et IA64 de .NET.

Complex minusOne = new Complex(-1, 0);
Console.WriteLine(Complex.Sqrt(minusOne));
// The example displays the following output:
//    (6.12303176911189E-17, 1) on 32-bit systems.
//    (6.12323399573677E-17,1) on IA64 systems.
Dim minusOne As New Complex(-1, 0)
Console.WriteLine(Complex.Sqrt(minusOne))
' The example displays the following output:
'    (6.12303176911189E-17, 1) on 32-bit systems.
'    (6.12323399573677E-17,1) on IA64 systems.

Infini et NaN

Les parties réelles et imaginaires d’un nombre complexe sont représentées par Double des valeurs. En plus de varier de Double.MinValue à Double.MaxValue, la partie réelle ou imaginaire d’un nombre complexe peut avoir une valeur de Double.PositiveInfinity, Double.NegativeInfinity, ou Double.NaN. Double.PositiveInfinity, Double.NegativeInfinityet Double.NaN tous se propagent dans n’importe quelle opération arithmétique ou trigonométrique.

Dans l’exemple suivant, la division par Zero produit un nombre complexe dont les parties réelle et imaginaire sont tous deux Double.NaN. Par conséquent, l’exécution d’une multiplication avec cette valeur produit également un nombre complexe dont les parties réelles et imaginaires sont Double.NaN. De même, l’exécution d’une multiplication qui dépasse la plage du type produit un nombre complexe dont la Double partie réelle est Double.NaN et dont la partie imaginaire est Double.PositiveInfinity. Par la suite, l’exécution d’une division avec ce nombre complexe retourne un nombre complexe dont la partie réelle est Double.NaN et dont la partie imaginaire est Double.PositiveInfinity.

using System;
using System.Numerics;

public class NaNEx
{
    public static void Run()
    {
        Complex c1 = new Complex(Double.MaxValue / 2, Double.MaxValue / 2);

        Complex c2 = c1 / Complex.Zero;
        Console.WriteLine(c2.ToString());
        c2 = c2 * new Complex(1.5, 1.5);
        Console.WriteLine(c2.ToString());
        Console.WriteLine();

        Complex c3 = c1 * new Complex(2.5, 3.5);
        Console.WriteLine(c3.ToString());
        c3 = c3 + new Complex(Double.MinValue / 2, Double.MaxValue / 2);
        Console.WriteLine(c3);
    }
}
// The example displays the following output:
//       (NaN, NaN)
//       (NaN, NaN)
//       (NaN, Infinity)
//       (NaN, Infinity)
Imports System.Numerics

Module Example4
    Public Sub Run()
        Dim c1 As Complex = New Complex(Double.MaxValue / 2, Double.MaxValue / 2)

        Dim c2 As Complex = c1 / Complex.Zero
        Console.WriteLine(c2.ToString())
        c2 = c2 * New Complex(1.5, 1.5)
        Console.WriteLine(c2.ToString())
        Console.WriteLine()

        Dim c3 As Complex = c1 * New Complex(2.5, 3.5)
        Console.WriteLine(c3.ToString())
        c3 = c3 + New Complex(Double.MinValue / 2, Double.MaxValue / 2)
        Console.WriteLine(c3)
    End Sub
End Module
' The example displays the following output:
'       (NaN, NaN)
'       (NaN, NaN)
'
'       (NaN, Infinity)
'       (NaN, Infinity)

Les opérations mathématiques avec des nombres complexes non valides ou qui dépassent la plage du Double type de données ne lèvent pas d’exception. Au lieu de cela, ils retournent un Double.PositiveInfinity, Double.NegativeInfinityou Double.NaN dans les conditions suivantes :

Notez que cela s’applique aux calculs intermédiaires effectués par une méthode. Par exemple, la multiplication de new Complex(9e308, 9e308) and new Complex(2.5, 3.5) utilise la formule (ac - bd) + (ad + bc)i. Le calcul du composant réel qui résulte de la multiplication évalue l’expression 9e308 2.5 - 9e308 3.5. Chaque multiplication intermédiaire dans cette expression retourne Double.PositiveInfinity, et la tentative de soustraction Double.PositiveInfinity des Double.PositiveInfinity retours Double.NaN.

Mettre en forme un nombre complexe

Par défaut, la représentation sous forme de chaîne d’un nombre complexe prend la forme <réelle;imaginaire>, où réelle et imaginaire sont les représentations sous forme de chaîne des Double valeurs formant les composantes réelle et imaginaire du nombre complexe. Certaines surcharges de la ToString méthode permettent de personnaliser les représentations sous forme de chaînes de ces Double valeurs afin de refléter les conventions de mise en forme d’une culture particulière ou d’apparaître dans un format particulier défini par une chaîne de format numérique standard ou personnalisée. (Pour plus d’informations, consultez Chaînes de format numérique standard et chaînes de format numérique personnalisées.)

L’une des façons les plus courantes d’exprimer la représentation sous forme de chaîne d’un nombre complexe prend la forme a + bi, où a est le composant réel du nombre complexe et b est le composant imaginaire du nombre complexe. Dans l’ingénierie électrique, un nombre complexe est le plus souvent exprimé sous la forme a + bj. Vous pouvez retourner la représentation sous forme de chaîne d’un nombre complexe dans l’une de ces deux formes. Pour ce faire, définissez un fournisseur de format personnalisé en implémentant les interfaces ICustomFormatter et IFormatProvider, puis appelez la méthode String.Format(IFormatProvider, String, Object[]).

L’exemple suivant définit une ComplexFormatter classe qui représente un nombre complexe sous la forme d’une chaîne sous la forme de l’une ou l’autre a + bia + bj.

using System;
using System.Numerics;

public class ComplexFormatter : IFormatProvider, ICustomFormatter
{
    public object GetFormat(Type formatType)
    {
        if (formatType == typeof(ICustomFormatter))
            return this;
        else
            return null;
    }

    public string Format(string format, object arg,
                         IFormatProvider provider)
    {
        if (arg is Complex c1)
        {
            // Check if the format string has a precision specifier.
            int precision;
            string fmtString = string.Empty;
            if (format.Length > 1)
            {
                try
                {
                    precision = int.Parse(format.Substring(1));
                }
                catch (FormatException)
                {
                    precision = 0;
                }
                fmtString = "N" + precision.ToString();
            }
            if (format.Substring(0, 1).Equals("I", StringComparison.OrdinalIgnoreCase))
            {
                // Determine the sign to display.
                char sign = c1.Imaginary < 0 ? '-' : '+';
                // Display the determined sign and the absolute value of the imaginary part.
                return c1.Real.ToString(fmtString) + " " + sign + " " + Math.Abs(c1.Imaginary).ToString(fmtString) + "i";
            }
            else if (format.Substring(0, 1).Equals("J", StringComparison.OrdinalIgnoreCase))
            {
                // Determine the sign to display.
                char sign = c1.Imaginary < 0 ? '-' : '+';
                // Display the determined sign and the absolute value of the imaginary part.
                return c1.Real.ToString(fmtString) + " " + sign + " " + Math.Abs(c1.Imaginary).ToString(fmtString) + "j";
            }
            else
                return c1.ToString(format, provider);
        }
        else
        {
            if (arg is IFormattable formattable)
                return formattable.ToString(format, provider);
            else if (arg != null)
                return arg.ToString();
            else
                return string.Empty;
        }
    }
}
Imports System.Numerics

Public Class ComplexFormatter
    Implements IFormatProvider, ICustomFormatter

    Public Function GetFormat(formatType As Type) As Object _
                    Implements IFormatProvider.GetFormat
        If formatType Is GetType(ICustomFormatter) Then
            Return Me
        Else
            Return Nothing
        End If
    End Function

    Public Function Format(fmt As String, arg As Object,
                           provider As IFormatProvider) As String _
                    Implements ICustomFormatter.Format
        If TypeOf arg Is Complex Then
            Dim c1 As Complex = DirectCast(arg, Complex)
            ' Check if the format string has a precision specifier.
            Dim precision As Integer
            Dim fmtString As String = String.Empty
            If fmt.Length > 1 Then
                Try
                    precision = Integer.Parse(fmt.Substring(1))
                Catch e As FormatException
                    precision = 0
                End Try
                fmtString = "N" + precision.ToString()
            End If
            ' Determine the sign to display.
            Dim sign As Char = If(c1.Imaginary < 0.0, "-"c, "+"c)
            ' Display the determined sign and the absolute value of the imaginary part.
            If fmt.Substring(0, 1).Equals("I", StringComparison.OrdinalIgnoreCase) Then
                Return c1.Real.ToString(fmtString) + " " + sign + " " + Math.Abs(c1.Imaginary).ToString(fmtString) + "i"
            ElseIf fmt.Substring(0, 1).Equals("J", StringComparison.OrdinalIgnoreCase) Then
                Return c1.Real.ToString(fmtString) + " " + sign + " " + Math.Abs(c1.Imaginary).ToString(fmtString) + "j"
            Else
                Return c1.ToString(fmt, provider)
            End If
        Else
            If TypeOf arg Is IFormattable Then
                Return DirectCast(arg, IFormattable).ToString(fmt, provider)
            ElseIf arg IsNot Nothing Then
                Return arg.ToString()
            Else
                Return String.Empty
            End If
        End If
    End Function
End Class

L’exemple suivant utilise ensuite ce formateur personnalisé pour afficher la représentation sous forme de chaîne d’un nombre complexe.

public class CustomFormatEx
{
    public static void Run()
    {
        Complex c1 = new(12.1, 15.4);
        Console.WriteLine($"Formatting with ToString:         {c1}");
        Console.WriteLine($"Formatting with ToString(format): {c1:N2}");
        Console.WriteLine($"Custom formatting with I0:\t" +
            $"  {string.Format(new ComplexFormatter(), "{0:I0}", c1)}");
        Console.WriteLine($"Custom formatting with J3:\t" +
            $"  {string.Format(new ComplexFormatter(), "{0:J3}", c1)}");
    }
}

// The example displays the following output:
//    Formatting with ToString():       <12.1; 15.4>
//    Formatting with ToString(format): <12.10; 15.40>
//    Custom formatting with I0:        12 + 15i
//    Custom formatting with J3:        12.100 + 15.400j
Module Example2
    Public Sub Run()
        Dim c1 As New Complex(12.1, 15.4)
        Console.WriteLine($"Formatting with ToString():       {c1}")
        Console.WriteLine($"Formatting with ToString(format): {c1:N2}")
        Console.WriteLine($"Custom formatting with I0:        " +
                          $"{String.Format(New ComplexFormatter(), "{0:I0}", c1)}")
        Console.WriteLine($"Custom formatting with J3:        " +
                          $"{String.Format(New ComplexFormatter(), "{0:J3}", c1)}")
    End Sub
End Module

' The example displays the following output:
'    Formatting with ToString():       <12.1; 15.4>
'    Formatting with ToString(format): <12.10; 15.40>
'    Custom formatting with I0:        12 + 15i
'    Custom formatting with J3:        12.100 + 15.400j

Constructeurs

Nom Description
Complex(Double, Double)

Initialise une nouvelle instance de la Complex structure à l’aide des valeurs réelles et imaginaires spécifiées.

Champs

Nom Description
ImaginaryOne

Retourne une nouvelle Complex instance avec un nombre réel égal à zéro et un nombre imaginaire égal à un.

Infinity

Représente l’infini comme un nombre complexe.

NaN

Représente une instance complexe qui n’est pas un nombre (NaN).

One

Retourne une nouvelle Complex instance avec un nombre réel égal à un et un nombre imaginaire égal à zéro.

Zero

Retourne une nouvelle Complex instance avec un nombre réel égal à zéro et un nombre imaginaire égal à zéro.

Propriétés

Nom Description
Imaginary

Obtient le composant imaginaire de l’objet actuel Complex .

Magnitude

Obtient la magnitude (ou la valeur absolue) d’un nombre complexe.

Phase

Obtient la phase d’un nombre complexe.

Real

Obtient le composant réel de l’objet actuel Complex .

Méthodes

Nom Description
Abs(Complex)

Obtient la valeur absolue (ou magnitude) d’un nombre complexe.

Acos(Complex)

Retourne l’angle qui est le cosinus d’arc du nombre complexe spécifié.

Add(Complex, Complex)

Ajoute deux nombres complexes et retourne le résultat.

Add(Complex, Double)

Ajoute un nombre complexe à un nombre réel double précision et retourne le résultat.

Add(Double, Complex)

Ajoute un nombre réel double précision à un nombre complexe et retourne le résultat.

Asin(Complex)

Retourne l’angle qui correspond au sinus d’arc du nombre complexe spécifié.

Atan(Complex)

Retourne l’angle qui est la tangente d’arc du nombre complexe spécifié.

Conjugate(Complex)

Calcule le conjugue d’un nombre complexe et retourne le résultat.

Cos(Complex)

Retourne le cosinus du nombre complexe spécifié.

Cosh(Complex)

Retourne le cosinus hyperbolique du nombre complexe spécifié.

CreateChecked<TOther>(TOther)

Crée une instance du type actuel à partir d’une valeur, lève une exception de dépassement de capacité pour toutes les valeurs qui se trouvent en dehors de la plage représentée du type actuel.

CreateSaturating<TOther>(TOther)

Crée une instance du type actuel à partir d’une valeur, en saturant toutes les valeurs qui se trouvent en dehors de la plage représentée du type actuel.

CreateTruncating<TOther>(TOther)

Crée une instance du type actuel à partir d’une valeur, tronqué toutes les valeurs qui se trouvent en dehors de la plage représentée du type actuel.

Divide(Complex, Complex)

Divise un nombre complexe par un autre et retourne le résultat.

Divide(Complex, Double)

Divise un nombre complexe par un nombre réel double précision et retourne le résultat.

Divide(Double, Complex)

Divise un nombre réel double précision par un nombre complexe et retourne le résultat.

Equals(Complex)

Retourne une valeur qui indique si l’instance actuelle et un nombre complexe spécifié ont la même valeur.

Equals(Object)

Retourne une valeur qui indique si l’instance actuelle et un objet spécifié ont la même valeur.

Exp(Complex)

Retourne e élevé à la puissance spécifiée par un nombre complexe.

FromPolarCoordinates(Double, Double)

Crée un nombre complexe à partir des coordonnées polaires d’un point.

GetHashCode()

Retourne le code de hachage de l’objet actif Complex .

IsComplexNumber(Complex)

Détermine si une valeur représente une valeur complexe.

IsEvenInteger(Complex)

Détermine si une valeur représente un nombre intégral pair.

IsFinite(Complex)

Détermine si le nombre complexe spécifié est fini.

IsImaginaryNumber(Complex)

Détermine si une valeur représente un nombre imaginaire.

IsInfinity(Complex)

Retourne une valeur indiquant si le nombre complexe spécifié est évalué à l’infini.

IsInteger(Complex)

Détermine si une valeur représente une valeur intégrale.

IsNaN(Complex)

Retourne une valeur qui indique si l’instance complexe spécifiée n’est pas un nombre (NaN).

IsNegative(Complex)

Détermine si une valeur est négative.

IsNegativeInfinity(Complex)

Détermine si une valeur est l’infini négatif.

IsNormal(Complex)

Détermine si une valeur est normale.

IsOddInteger(Complex)

Détermine si une valeur représente un nombre intégral impair.

IsPositive(Complex)

Détermine si une valeur est positive.

IsPositiveInfinity(Complex)

Détermine si une valeur est l’infini positif.

IsRealNumber(Complex)

Détermine si une valeur représente un nombre réel.

IsSubnormal(Complex)

Détermine si une valeur est subnormale.

Log(Complex, Double)

Retourne le logarithme d’un nombre complexe spécifié dans une base spécifiée.

Log(Complex)

Retourne le logarithme naturel (de base e) d’un nombre complexe spécifié.

Log10(Complex)

Retourne le logarithme de base 10 d’un nombre complexe spécifié.

MaxMagnitude(Complex, Complex)

Compare deux valeurs au calcul, ce qui est supérieur.

MinMagnitude(Complex, Complex)

Compare deux valeurs au calcul, ce qui est inférieur.

Multiply(Complex, Complex)

Retourne le produit de deux nombres complexes.

Multiply(Complex, Double)

Retourne le produit d’un nombre complexe et d’un nombre réel double précision.

Multiply(Double, Complex)

Retourne le produit d’un nombre réel double précision et d’un nombre complexe.

Negate(Complex)

Retourne l’inverse additif d’un nombre complexe spécifié.

Parse(ReadOnlySpan<Byte>, IFormatProvider)

Représente un nombre complexe.

Parse(ReadOnlySpan<Byte>, NumberStyles, IFormatProvider)

Représente un nombre complexe.

Parse(ReadOnlySpan<Char>, IFormatProvider)

Analyse une étendue de caractères en une valeur.

Parse(ReadOnlySpan<Char>, NumberStyles, IFormatProvider)

Analyse une étendue de caractères en une valeur.

Parse(String, IFormatProvider)

Analyse une chaîne en une valeur.

Parse(String, NumberStyles, IFormatProvider)

Analyse une chaîne en une valeur.

Pow(Complex, Complex)

Retourne un nombre complexe spécifié déclenché à une puissance spécifiée par un nombre complexe.

Pow(Complex, Double)

Retourne un nombre complexe spécifié élevé à une puissance spécifiée par un nombre à virgule flottante double précision.

Reciprocal(Complex)

Retourne l’inverse multiplicatif d’un nombre complexe.

Sin(Complex)

Retourne le sinus du nombre complexe spécifié.

Sinh(Complex)

Retourne le sinus hyperbolique du nombre complexe spécifié.

Sqrt(Complex)

Retourne la racine carrée d’un nombre complexe spécifié.

Subtract(Complex, Complex)

Soustrait un nombre complexe d’un autre et retourne le résultat.

Subtract(Complex, Double)

Soustrait un nombre réel double précision d’un nombre complexe et retourne le résultat.

Subtract(Double, Complex)

Soustrait un nombre complexe d’un nombre réel double précision et retourne le résultat.

Tan(Complex)

Retourne la tangente du nombre complexe spécifié.

Tanh(Complex)

Retourne la tangente hyperbolique du nombre complexe spécifié.

ToString()

Convertit la valeur du nombre complexe actuel en sa représentation sous forme cartessienne équivalente.

ToString(IFormatProvider)

Convertit la valeur du nombre complexe actuel en sa représentation sous forme de chaîne équivalente sous forme cartessienne à l’aide des informations de mise en forme spécifiques à la culture spécifiées.

ToString(String, IFormatProvider)

Convertit la valeur du nombre complexe actuel en sa représentation sous forme de chaîne équivalente sous forme cartessienne à l’aide des informations de format spécifiques à la culture et au format spécifiés pour ses parties réelles et imaginaires.

ToString(String)

Convertit la valeur du nombre complexe actuel en sa représentation sous forme de chaîne équivalente sous forme cartessienne à l’aide du format spécifié pour ses parties réelles et imaginaires.

TryFormat(Span<Byte>, Int32, ReadOnlySpan<Char>, IFormatProvider)

Tente de mettre en forme la valeur de l’instance actuelle en UTF-8 dans l’étendue fournie d’octets.

TryFormat(Span<Char>, Int32, ReadOnlySpan<Char>, IFormatProvider)

Tente de mettre en forme la valeur de l’instance actuelle dans l’étendue fournie de caractères.

TryParse(ReadOnlySpan<Byte>, IFormatProvider, Complex)

Représente un nombre complexe.

TryParse(ReadOnlySpan<Byte>, NumberStyles, IFormatProvider, Complex)

Représente un nombre complexe.

TryParse(ReadOnlySpan<Char>, IFormatProvider, Complex)

Tente d’analyser une étendue de caractères en une valeur.

TryParse(ReadOnlySpan<Char>, NumberStyles, IFormatProvider, Complex)

Tente d’analyser une étendue de caractères en une valeur.

TryParse(String, IFormatProvider, Complex)

Tente d’analyser une chaîne en une valeur.

TryParse(String, NumberStyles, IFormatProvider, Complex)

Tente d’analyser une chaîne en une valeur.

Opérateurs

Nom Description
Addition(Complex, Complex)

Ajoute deux nombres complexes.

Addition(Complex, Double)

Ajoute un nombre complexe à un nombre réel double précision.

Addition(Double, Complex)

Ajoute un nombre réel double précision à un nombre complexe.

Decrement(Complex)

Décrémente une valeur.

Division(Complex, Complex)

Divise un nombre complexe spécifié par un autre nombre complexe spécifié.

Division(Complex, Double)

Divise un nombre complexe spécifié par un nombre réel double précision spécifié.

Division(Double, Complex)

Divise un nombre réel double précision spécifié par un nombre complexe spécifié.

Equality(Complex, Complex)

Retourne une valeur qui indique si deux nombres complexes sont égaux.

Explicit(BigInteger to Complex)

Définit une conversion explicite d’une BigInteger valeur en nombre complexe.

Explicit(Decimal to Complex)

Définit une conversion explicite d’une Decimal valeur en nombre complexe.

Explicit(Int128 to Complex)

Convertit explicitement une Int128 valeur en nombre complexe double précision.

Explicit(UInt128 to Complex)

Convertit explicitement une UInt128 valeur en nombre complexe double précision.

Implicit(BFloat16 to Complex)

Représente un nombre complexe.

Implicit(Byte to Complex)

Définit une conversion implicite d’un octet non signé en nombre complexe.

Implicit(Char to Complex)

Convertit implicitement une Char valeur en nombre complexe double précision.

Implicit(Double to Complex)

Définit une conversion implicite d’un nombre à virgule flottante double précision en nombre complexe.

Implicit(Half to Complex)

Convertit implicitement une Half valeur en nombre complexe double précision.

Implicit(Int16 to Complex)

Définit une conversion implicite d’un entier signé 16 bits en nombre complexe.

Implicit(Int32 to Complex)

Définit une conversion implicite d’un entier signé 32 bits en nombre complexe.

Implicit(Int64 to Complex)

Définit une conversion implicite d’un entier signé 64 bits en nombre complexe.

Implicit(IntPtr to Complex)

Convertit implicitement une IntPtr valeur en nombre complexe double précision.

Implicit(SByte to Complex)

Définit une conversion implicite d’un octet signé en nombre complexe.

Cette API n’est pas conforme CLS.

Implicit(Single to Complex)

Définit une conversion implicite d’un nombre à virgule flottante simple précision en nombre complexe.

Implicit(UInt16 to Complex)

Définit une conversion implicite d’un entier non signé 16 bits en nombre complexe.

Cette API n’est pas conforme CLS.

Implicit(UInt32 to Complex)

Définit une conversion implicite d’un entier non signé 32 bits en nombre complexe.

Cette API n’est pas conforme CLS.

Implicit(UInt64 to Complex)

Définit une conversion implicite d’un entier non signé 64 bits en nombre complexe.

Cette API n’est pas conforme CLS.

Implicit(UIntPtr to Complex)

Convertit implicitement une UIntPtr valeur en nombre complexe double précision.

Increment(Complex)

Incrémente une valeur.

Inequality(Complex, Complex)

Retourne une valeur qui indique si deux nombres complexes ne sont pas égaux.

Multiply(Complex, Complex)

Multiplie deux nombres complexes spécifiés.

Multiply(Complex, Double)

Multiplie le nombre complexe spécifié par un nombre réel double précision spécifié.

Multiply(Double, Complex)

Multiplie un nombre réel double précision spécifié par un nombre complexe spécifié.

Subtraction(Complex, Complex)

Soustrait un nombre complexe d’un autre nombre complexe.

Subtraction(Complex, Double)

Soustrait un nombre réel double précision d’un nombre complexe.

Subtraction(Double, Complex)

Soustrait un nombre complexe d’un nombre réel double précision.

UnaryNegation(Complex)

Retourne l’inverse additif d’un nombre complexe spécifié.

UnaryPlus(Complex)

Calcule le plus unaire d’une valeur.

Implémentations d’interfaces explicites

Nom Description
IAdditiveIdentity<Complex,Complex>.AdditiveIdentity

Obtient l’identité additive du type actuel.

IMultiplicativeIdentity<Complex,Complex>.MultiplicativeIdentity

Obtient l’identité multiplicative du type actuel.

INumberBase<Complex>.Abs(Complex)

Calcule l’absolu d’une valeur.

INumberBase<Complex>.IsCanonical(Complex)

Détermine si une valeur se trouve dans sa représentation canonique.

INumberBase<Complex>.IsZero(Complex)

Détermine si une valeur est égale à zéro.

INumberBase<Complex>.MaxMagnitudeNumber(Complex, Complex)

Compare deux valeurs au calcul qui a la plus grande magnitude et retourne l’autre valeur si une entrée est NaN.

INumberBase<Complex>.MinMagnitudeNumber(Complex, Complex)

Compare deux valeurs au calcul dont la magnitude est inférieure et retourne l’autre valeur si une entrée est NaN.

INumberBase<Complex>.MultiplyAddEstimate(Complex, Complex, Complex)

Calcule une estimation de (left * right) + addend.

INumberBase<Complex>.One

Obtient la valeur 1 du type.

INumberBase<Complex>.Radix

Obtient le radix, ou la base, pour le type.

INumberBase<Complex>.TryConvertFromChecked<TOther>(TOther, Complex)

Représente un nombre complexe.

INumberBase<Complex>.TryConvertFromSaturating<TOther>(TOther, Complex)

Représente un nombre complexe.

INumberBase<Complex>.TryConvertFromTruncating<TOther>(TOther, Complex)

Représente un nombre complexe.

INumberBase<Complex>.TryConvertToChecked<TOther>(Complex, TOther)

Tente de convertir une instance du type actuel en un autre type, lève une exception de dépassement de capacité pour toutes les valeurs qui se trouvent en dehors de la plage représentée du type actuel.

INumberBase<Complex>.TryConvertToSaturating<TOther>(Complex, TOther)

Tente de convertir une instance du type actuel en un autre type, en saturant toutes les valeurs qui se trouvent en dehors de la plage représentée du type actuel.

INumberBase<Complex>.TryConvertToTruncating<TOther>(Complex, TOther)

Tente de convertir une instance du type actuel en un autre type, en tronqué toutes les valeurs qui se trouvent en dehors de la plage représentée du type actuel.

INumberBase<Complex>.Zero

Obtient la valeur 0 du type.

ISignedNumber<Complex>.NegativeOne

Obtient la valeur -1 du type.

S’applique à