Valeurs numériques dans .NETNumerics in .NET

.NET fournit une plage de primitives numériques pour les intégraux et les nombres à virgule flottante, ainsi que System.Numerics.BigInteger, un type intégral sans limite théorique supérieure ou inférieure, System.Numerics.Complex, qui représente des nombres complexes et un ensemble de types compatibles SIMD dans l’espace de noms System.Numerics..NET provides a range of numeric integer and floating-point primitives, as well as System.Numerics.BigInteger, which is an integral type with no theoretical upper or lower bound, System.Numerics.Complex, which represents complex numbers, and a set of SIMD-enabled types in the System.Numerics namespace.

Types d'entierInteger types

.NET prend en charge à la fois les types d’entier signés et non signés 8, 16, 32 et 64 bits, répertoriés dans le tableau suivant :.NET supports both signed and unsigned 8-, 16-, 32-, and 64-bit integer types, which are listed in the following table:

TypeType Signé/Non signéSigned/Unsigned Taille (en octets)Size (in bytes) Valeur minimaleMinimum value Valeur maximaleMaximum value
System.Byte Non signéUnsigned 11 00 255255
System.Int16 SignéSigned 22 -32,768-32,768 32,76732,767
System.Int32 SignéSigned 44 -2,147,483,648-2,147,483,648 2,147,483,6472,147,483,647
System.Int64 SignéSigned 88 -9,223,372,036,854,775,808-9,223,372,036,854,775,808 9,223,372,036,854,775,8079,223,372,036,854,775,807
System.SByte SignéSigned 11 -128-128 127127
System.UInt16 Non signéUnsigned 22 00 65,53565,535
System.UInt32 Non signéUnsigned 44 00 4,294,967,2954,294,967,295
System.UInt64 Non signéUnsigned 88 00 18 446 744 073 709 551 61518,446,744,073,709,551,615

Chaque type d’entier prend en charge un ensemble d’opérateurs arithmétiques standard.Each integer type supports a set of standard arithmetic operators. La classe System.Math fournit des méthodes pour un ensemble plus large de fonctions mathématiques.The System.Math class provides methods for a broader set of mathematical functions.

Vous pouvez également travailler avec les bits individuels d'une valeur d'entier en utilisant la classe System.BitConverter.You can also work with the individual bits in an integer value by using the System.BitConverter class.

Notes

Les types d’entier non signés ne sont pas conformes à CLS.The unsigned integer types are not CLS-compliant. Pour plus d'informations, consultez Language Independence and Language-Independent Components.For more information, see Language Independence and Language-Independent Components.

BigIntegerBigInteger

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.The System.Numerics.BigInteger structure is an immutable type that represents an arbitrarily large integer whose value in theory has no upper or lower bounds. Les méthodes du type BigInteger sont très proches de celles des autres types intégraux.The methods of the BigInteger type closely parallel those of the other integral types.

Types virgule flottanteFloating-point types

.NET comprend trois types à virgule flottante primitifs, qui sont répertoriés dans le tableau suivant :.NET includes three primitive floating-point types, which are listed in the following table:

TypeType Taille (en octets)Size (in bytes) Plage approximativeApproximate range PrécisionPrecision
System.Single 44 ±1,5 x 10−45 à ±3,4 x 1038±1.5 x 10−45 to ±3.4 x 1038 ~6-9 chiffres~6-9 digits
System.Double 88 De ±5,0 × 10−324 à ±1,7 × 10308±5.0 × 10−324 to ±1.7 × 10308 ~15-17 chiffres~15-17 digits
System.Decimal 1616 ±1,0 x 10-28 to ±7,9228 x 1028±1.0 x 10-28 to ±7.9228 x 1028 28 à 29 chiffres28-29 digits

Les deux types Single et Double prennent en charge des valeurs spéciales qui représentent une valeur NaN (N’est pas un nombre) et l’infini.Both Single and Double types support special values that represent not-a-number and infinity. Par exemple, le type Double fournit les valeurs suivantes : Double.NaN, Double.NegativeInfinity et Double.PositiveInfinity.For example, the Double type provides the following values: Double.NaN, Double.NegativeInfinity, and Double.PositiveInfinity. Vous utilisez les méthodes Double.IsNaN, Double.IsInfinity, Double.IsPositiveInfinity et Double.IsNegativeInfinity pour tester ces valeurs spéciales.You use the Double.IsNaN, Double.IsInfinity, Double.IsPositiveInfinity, and Double.IsNegativeInfinity methods to test for these special values.

Chaque type à virgule flottante prend en charge un ensemble d’opérateurs arithmétiques standard.Each floating-point type supports a set of standard arithmetic operators. La classe System.Math fournit des méthodes pour un ensemble plus large de fonctions mathématiques.The System.Math class provides methods for a broader set of mathematical functions. .NET Core 2.0 et versions ultérieures inclut la classe System.MathF, qui fournit des méthodes acceptant des arguments du type Single..NET Core 2.0 and later includes the System.MathF class that provides methods which accept arguments of the Single type.

Vous pouvez également travailler avec les bits individuels de valeurs Double et Single en utilisant la classe System.BitConverter.You can also work with the individual bits in Double and Single values by using the System.BitConverter class. La structure System.Decimal a ses propres méthodes, Decimal.GetBits et Decimal.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.The System.Decimal structure has its own methods, Decimal.GetBits and Decimal.Decimal(Int32[]), for working with a decimal value's individual bits, as well as its own set of methods for performing some additional mathematical operations.

Les types Double et Single 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.The Double and Single types are intended to be used for values that by their nature are imprecise (for example, the distance between two stars) and for applications in which a high degree of precision and small rounding error is not required. Vous devez utiliser 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.You should use the System.Decimal type for cases in which greater precision is required and rounding errors should be minimized.

Notes

Le type Decimal n’élimine pas la nécessité d’arrondi.The Decimal type doesn't eliminate the need for rounding. Au lieu de cela, il réduit les erreurs dues à l’arrondi.Rather, it minimizes errors due to rounding.

ComplexComplex

La structure System.Numerics.Complex représente un nombre complexe, c'est-à-dire un nombre avec une partie réelle et une partie imaginaire.The System.Numerics.Complex structure represents a complex number, that is, a number with a real number part and an imaginary number part. 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.It supports a standard set of arithmetic, comparison, equality, explicit and implicit conversion operators, as well as mathematical, algebraic, and trigonometric methods.

Types SIMDSIMD-enabled types

L’espace de noms System.Numerics comprend un ensemble de types compatibles SIMD pour .NET.The System.Numerics namespace includes a set of .NET SIMD-enabled types. Les opérations SIMD (Single Instruction Multiple Data) peuvent être parallélisées au niveau du matériel.SIMD (Single Instruction Multiple Data) operations can be parallelized at the hardware level. Cela augmente le débit des calculs vectorisés, couramment utilisés dans les applications mathématiques, scientifiques et graphiques.That increases the throughput of the vectorized computations, which are common in mathematical, scientific, and graphics apps.

Les types .NET compatibles SIMD sont les suivants :The .NET SIMD-enabled types include the following:

  • Les types Vector2, Vector3 et Vector4, qui représentent des vecteurs à 2, 3 et 4 valeurs Single.The Vector2, Vector3, and Vector4 types, which represent vectors with 2, 3, and 4 Single values.

  • Deux types de matrices, Matrix3x2, qui représente une matrice 3 x 2, et Matrix4x4, qui représente une matrice 4 x 4.Two matrix types, Matrix3x2, which represents a 3x2 matrix, and Matrix4x4, which represents a 4x4 matrix.

  • Le type Plane, qui représente un plan dans un espace à trois dimensions.The Plane type, which represents a plane in three-dimensional space.

  • Le type Quaternion, qui représente un vecteur utilisé pour encoder des rotations physiques en trois dimensions.The Quaternion type, which represents a vector that is used to encode three-dimensional physical rotations.

  • 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.The Vector<T> type, which represents a vector of a specified numeric type and provides a broad set of operators that benefit from SIMD support. 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é.The count of a Vector<T> instance is fixed, but its value Vector<T>.Count depends on the CPU of the machine, on which code is executed.

    Notes

    Le type Vector<T> n’est pas inclus dans .NET Framework.The Vector<T> type is not included into the .NET Framework. Vous devez installer le package NuGet System.Numerics.Vectors pour accéder à ce type.You must install the System.Numerics.Vectors NuGet package to get access to this 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.The SIMD-enabled types are implemented in such a way that they can be used with non-SIMD-enabled hardware or JIT compilers. 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.To take advantage of SIMD instructions, your 64-bit apps must be run by the runtime that uses the RyuJIT compiler, which is included in .NET Core and in the .NET Framework 4.6 and later versions. Il ajoute la prise en charge SIMD lors du ciblage de processeurs 64 bits.It adds SIMD support when targeting 64-bit processors.

Voir aussiSee also