Valeurs numériques dans .NET

.NET fournit une gamme de primitives numériques entières et à virgule flottante ainsi que :

Types d'entier

.NET prend en charge les types d’entiers signés et non signés de 8 bits, 16 bits, 32 bits, 64 bits et 128 bits, qui sont répertoriés dans les tableaux suivants.

Types d’entier signé

Type Taille (en octets) Valeur minimale Valeur maximale
System.Int16 2 -32,768 32 767
System.Int32 4 -2,147,483,648 2 147 483 647
System.Int64 8 -9,223,372,036,854,775,808 9,223,372,036,854,775,807
System.Int128 16 −170,141,183,460,469,231,731,687,303,715,884,105,728 170,141,183,460,469,231,731,687,303,715,884,105,727
System.SByte 1 -128 127
System.IntPtr (dans les processus 32 bits) 4 -2,147,483,648 2 147 483 647
System.IntPtr (dans les processus 64 bits) 8 -9,223,372,036,854,775,808 9,223,372,036,854,775,807

Types d’entier non signé

Type Taille (en octets) Valeur minimale Valeur maximale
System.Byte 1 0 255
System.UInt16 2 0 65 535
System.UInt32 4 0 4,294,967,295
System.UInt64 8 0 18 446 744 073 709 551 615
System.UInt128 16 0 340,282,366,920,938,463,463,374,607,431,768,211,455
System.UIntPtr (dans les processus 32 bits) 4 0 4,294,967,295
System.UIntPtr (dans les processus 64 bits) 8 0 18 446 744 073 709 551 615

Chaque type d’entier prend en charge un ensemble d’opérateurs arithmétiques standard. La classe System.Math fournit des méthodes pour un ensemble plus large de fonctions mathématiques.

Vous pouvez également travailler avec les bits individuels d'une valeur d'entier en utilisant la classe System.BitConverter.

Notes

Les types d’entier non signés ne sont pas conformes à CLS. Pour plus d’informations, consultez Indépendance du langage et composants indépendants du langage.

BigInteger

La structure System.Numerics.BigInteger est un type immuable qui représente un entier arbitrairement grand dont la valeur en théorie n'a pas de limite supérieure ou inférieure. Les méthodes du type BigInteger sont très proches de celles des autres types intégraux.

Types virgule flottante

.NET inclut les types à virgule flottante suivants :

Type Taille (en octets) Plage approximative Primitive ? Notes
System.Half 2 ±65504 Non Introduit dans .NET 5
System.Single 4 ±3,4 x 1038 Oui
System.Double 8 ±1,7 × 10308 Oui
System.Decimal 16 ±7,9228 x 1028 Non

Les types Half, Single et Double prennent en charge des valeurs spéciales qui représentent une valeur NaN (N’est pas un nombre) et l’infini. Par exemple, le type Double fournit les valeurs suivantes : Double.NaN, Double.NegativeInfinity et Double.PositiveInfinity. Vous utilisez les méthodes Double.IsNaN, Double.IsInfinity, Double.IsPositiveInfinity et Double.IsNegativeInfinity pour tester ces valeurs spéciales.

Chaque type à virgule flottante prend en charge un ensemble d’opérateurs arithmétiques standard. La classe System.Math fournit des méthodes pour un ensemble plus large de fonctions mathématiques. .NET Core 2.0 (et versions ultérieures) inclut la classe System.MathF, qui fournit des méthodes acceptant des arguments du type Single.

Vous pouvez également travailler avec les bits individuels de valeurs Double, Single et Half en utilisant la classe System.BitConverter. La structure System.Decimal a ses propres méthodes, Decimal.GetBits et Decimal(Int32[]) pour travailler avec les bits individuel d'une valeur décimale, ainsi que son propre ensemble de méthodes pour effectuer d'autres opérations mathématiques.

Les types Double, Single et Half sont destinés à être utilisé pour des valeurs par nature imprécises (par exemple, la distance entre deux étoiles) et les applications dans lesquelles un haut degré de précision et une erreur d’arrondi réduite ne sont pas des impératifs. Utilisez le type System.Decimal pour les cas dans lesquels une plus grande précision est requise et où les erreurs d’arrondi doivent être minimisées.

Notes

Le type Decimal n’élimine pas la nécessité d’arrondi. Au lieu de cela, il réduit les erreurs dues à l’arrondi.

Complex

La structure System.Numerics.Complex représente un nombre complexe, c'est-à-dire un nombre avec une partie réelle et une partie imaginaire. Elle prend en charge un ensemble standard d'opérateurs arithmétiques, de comparaison, d'égalité, de conversion explicite et implicite, ainsi que des méthodes mathématiques, algébriques et trigonométriques.

Types SIMD

L’espace de noms System.Numerics comprend un ensemble de types compatibles SIMD pour .NET. Les opérations SIMD (Single Instruction Multiple Data) peuvent être parallélisées au niveau du matériel. Cela augmente le débit des calculs vectorisés, couramment utilisés dans les applications mathématiques, scientifiques et graphiques.

Les types .NET compatibles SIMD sont les suivants :

  • Les types Vector2, Vector3 et Vector4, qui représentent des vecteurs à 2, 3 et 4 valeurs Single.

  • Deux types de matrices, Matrix3x2, qui représente une matrice 3 x 2, et Matrix4x4, qui représente une matrice 4 x 4.

  • Le type Plane, qui représente un plan dans un espace à trois dimensions.

  • Le type Quaternion, qui représente un vecteur utilisé pour encoder des rotations physiques en trois dimensions.

  • Le type Vector<T>, qui représente un vecteur d’un type numérique spécifié et fournit un large éventail d’opérateurs bénéficiant d’un support SIMD. Le nombre d’une instance Vector<T> est fixe, mais sa valeur Vector<T>.Count dépend de l’UC de l’ordinateur sur lequel le code est exécuté.

    Notes

    Le type Vector<T> est inclus avec .NET Core et .NET 5 (et versions ultérieures), mais pas avec .NET Framework. Si vous utilisez .NET Framework, installez le package NuGet System.Numerics.Vectors pour accéder à ce type.

Les types compatibles SIMD sont implémentés de telle sorte qu’ils peuvent être utilisés avec du matériel non compatible SIMD ou des compilateurs JIT. Pour tirer parti des instructions SIMD, vos applications 64 bits doivent être exécutées par le runtime qui utilise le compilateur RyuJIT, inclus dans .NET Core et dans .NET Framework 4.6 (et versions ultérieures). Il ajoute la prise en charge SIMD lors du ciblage de processeurs 64 bits.

Pour plus d’informations, consultez Utiliser des types numériques accélérés par SIMD.

Voir aussi