Partager via


Numériques dans .NET

.NET fournit une plage d’entiers numériques et de primitives à virgule flottante, ainsi que :

Types d'entier

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

Types entiers signés

Catégorie 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 1:27
System.IntPtr (dans processus 32 bits) 4 -2,147,483,648 2 147 483 647
System.IntPtr (dans processus 64 bits) 8 -9,223,372,036,854,775,808 9,223,372,036,854,775,807

Types entiers non signés

Catégorie Taille (en octets) Valeur minimale Valeur maximale
System.Byte 1 0 2:55
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 processus 32 bits) 4 0 4,294,967,295
System.UIntPtr (dans processus 64 bits) 8 0 18,446,744,073,709,551,615

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

Vous pouvez également utiliser les bits individuels dans une valeur entière à l’aide de la System.BitConverter classe.

Remarque

Les types entiers non signés ne sont pas conformes CLS. Pour plus d’informations, consultez Les composants indépendants de la langue et de l’indépendance du langage.

BigInteger

La System.Numerics.BigInteger structure est un type immuable qui représente un entier arbitrairement volumineux dont la valeur en théorie n’a pas de limites supérieures ou inférieures. Les méthodes du BigInteger type sont étroitement parallèles à celles des autres types intégraux.

Types virgule flottante

.NET inclut les types à virgule flottante suivants :

Catégorie Taille (en octets) Plage approximative Primitif? Remarques
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 Double type 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 System.Math classe fournit des méthodes pour un ensemble plus large de fonctions mathématiques. .NET Core 2.0 et versions ultérieures inclut la System.MathF classe, qui fournit des méthodes qui acceptent des arguments du Single type.

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 individuels d'une valeur décimale, ainsi que son propre ensemble de méthodes pour effectuer des opérations mathématiques supplémentaires.

Les types Double, Single, et Half sont destinés à être utilisés pour des valeurs qui, par leur nature, sont imprécises (par exemple, la distance entre deux étoiles) et pour des applications où un degré élevé de précision et une faible erreur d'arrondi ne sont pas nécessaires. Utilisez le System.Decimal type pour les cas où une plus grande précision est requise et les erreurs d’arrondi doivent être réduites.

Remarque

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

Complexe

La System.Numerics.Complex structure représente un nombre complexe, c’est-à-dire un nombre avec une partie numérique réelle et une partie de nombre imaginaire. Il prend en charge un ensemble standard d’opérateurs arithmétiques, de comparaison, d’égalité, d’opérateurs de conversion explicites et implicites, 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 (Instruction unique multiple données) peuvent être parallélisées au niveau matériel. Cela augmente le débit des calculs vectorisés, qui sont courants dans les applications mathématiques, scientifiques et graphiques.

Les types .NET activés pour SIMD comprennent les suivants :

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

  • Deux types de matrices, Matrix3x2qui représente une matrice 3x2 et Matrix4x4, qui représente une matrice 4x4.

  • Type Plane , qui représente un plan dans un espace tridimensionnel.

  • Type Quaternion , qui représente un vecteur utilisé pour encoder des rotations physiques tridimensionnelles.

  • Type Vector<T> , qui représente un vecteur d’un type numérique spécifié et fournit un large ensemble d’opérateurs qui bénéficient de la prise en charge SIMD. Le nombre d’instances Vector<T> est fixe, mais sa valeur Vector<T>.Count dépend du processeur de l’ordinateur, sur lequel le code est exécuté.

    Remarque

    Le Vector<T> type est inclus avec .NET Core et .NET 5+, mais pas .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 puissent être utilisés avec du matériel ou des compilateurs JIT non compatibles SIMD. 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