Valores numéricos en .NETNumerics in .NET

.NET proporciona una serie de tipos primitivos de entero numérico y de punto flotante, así como System.Numerics.BigInteger, que es un tipo entero sin límite inferior ni superior teórico, System.Numerics.Complex, que representa números complejos y un conjunto de tipos habilitados para SIMD en el espacio de nombres 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.

Tipos enterosInteger types

.NET admite tipos enteros de 8, 16, 32 y 64 bits con signo y sin signo, que se enumeran en la tabla siguiente:.NET supports both signed and unsigned 8-, 16-, 32-, and 64-bit integer types, which are listed in the following table:

TipoType Con signo/sin signoSigned/Unsigned Tamaño (en bytes)Size (in bytes) Valor mínimoMinimum value Valor máximoMaximum value
System.Byte Sin signoUnsigned 11 00 255255
System.Int16 FirmadoSigned 22 -32.768-32,768 32.76732,767
System.Int32 FirmadoSigned 44 -2.147.483.648-2,147,483,648 2.147.483.6472,147,483,647
System.Int64 FirmadoSigned 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 FirmadoSigned 11 -128-128 127127
System.UInt16 Sin signoUnsigned 22 00 65.53565,535
System.UInt32 Sin signoUnsigned 44 00 4.294.967.2954,294,967,295
System.UInt64 Sin signoUnsigned 88 00 18.446.744.073.709.551.61518,446,744,073,709,551,615

Cada tipo de entero admite un conjunto de operadores aritméticos estándar.Each integer type supports a set of standard arithmetic operators. La clase System.Math proporciona métodos para un conjunto más amplio de funciones matemáticas.The System.Math class provides methods for a broader set of mathematical functions.

También puede trabajar con los bits individuales de un valor entero usando la clase System.BitConverter.You can also work with the individual bits in an integer value by using the System.BitConverter class.

Nota

Los tipos enteros sin signo no son conformes a CLS.The unsigned integer types are not CLS-compliant. Para obtener más información, consulte Independencia del lenguaje y componentes independientes del lenguaje.For more information, see Language Independence and Language-Independent Components.

BigIntegerBigInteger

La estructura System.Numerics.BigInteger es un tipo inmutable que representa un entero arbitrariamente grande cuyo valor, en teoría, no tiene ningún límite superior o inferior.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. Los métodos del tipo BigInteger son análogos a los de otros tipos integrales.The methods of the BigInteger type closely parallel those of the other integral types.

Tipos de punto flotanteFloating-point types

.NET incluye tres tipos primitivos de punto flotante, que se enumeran en la tabla siguiente:.NET includes three primitive floating-point types, which are listed in the following table:

TipoType Tamaño (en bytes)Size (in bytes) Intervalo aproximadoApproximate range PrecisiónPrecision
System.Single 44 De ±1,5 x 10-45 a ±3,4 x 1038±1.5 x 10−45 to ±3.4 x 1038 De 6 a 9 dígitos aproximadamente~6-9 digits
System.Double 88 De ±5,0 × 10−324 a ±1,7 × 10308±5.0 × 10−324 to ±1.7 × 10308 De 15 a 17 dígitos aproximadamente~15-17 digits
System.Decimal 1616 De ±1,0 x 10-28 to ±7,9228 x 1028±1.0 x 10-28 to ±7.9228 x 1028 28-29 dígitos28-29 digits

Los tipos Single y Double admiten valores especiales que representan un valor no numérico e infinito.Both Single and Double types support special values that represent not-a-number and infinity. Por ejemplo, el tipo Double proporciona los siguientes valores: Double.NaN, Double.NegativeInfinity y Double.PositiveInfinity.For example, the Double type provides the following values: Double.NaN, Double.NegativeInfinity, and Double.PositiveInfinity. Los métodos Double.IsNaN, Double.IsInfinity, Double.IsPositiveInfinity y Double.IsNegativeInfinity se usan para comprobar estos valores especiales.You use the Double.IsNaN, Double.IsInfinity, Double.IsPositiveInfinity, and Double.IsNegativeInfinity methods to test for these special values.

Cada tipo de punto flotante admite un conjunto de operadores aritméticos estándar.Each floating-point type supports a set of standard arithmetic operators. La clase System.Math proporciona métodos para un conjunto más amplio de funciones matemáticas.The System.Math class provides methods for a broader set of mathematical functions. .NET Core 2.0 y versiones posteriores incluyen la clase System.MathF que proporciona métodos que aceptan argumentos del tipo Single..NET Core 2.0 and later includes the System.MathF class, which provides methods that accept arguments of the Single type.

También puede trabajar con bits individuales de valores Double y Single usando la clase System.BitConverter.You can also work with the individual bits in Double and Single values by using the System.BitConverter class. La estructura System.Decimal tiene sus propios métodos, Decimal.GetBits y Decimal(Int32[]), para trabajar con los bits individuales de un valor decimal, así como su propio conjunto de métodos para realizar algunas operaciones matemáticas adicionales.The System.Decimal structure has its own methods, Decimal.GetBits and 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.

Los tipos Double y Single están diseñados para usarse con valores que, por su naturaleza, no son precisos (por ejemplo, la distancia entre dos estrellas) y para aplicaciones en las que no se necesita un alto grado de precisión ni un mínimo error de redondeo.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. Use el tipo System.Decimal para los casos en los que se necesite una mayor precisión y se deban minimizar los errores de redondeo.Use the System.Decimal type for cases in which greater precision is required and rounding errors should be minimized.

Nota

El tipo Decimal no elimina la necesidad de redondeo.The Decimal type doesn't eliminate the need for rounding. En su lugar, minimiza los errores debido al redondeo.Rather, it minimizes errors due to rounding.

ComplexComplex

La estructura System.Numerics.Complex representa un número complejo, es decir, un número con una parte de número real y una parte de número imaginario.The System.Numerics.Complex structure represents a complex number, that is, a number with a real number part and an imaginary number part. Admite un conjunto estándar de operadores de aritmética, comparación, igualdad, conversión explícita e implícita, así como métodos matemáticos, algebraicos y trigonométricos.It supports a standard set of arithmetic, comparison, equality, explicit and implicit conversion operators, as well as mathematical, algebraic, and trigonometric methods.

Tipos habilitados para SIMDSIMD-enabled types

El espacio de nombres System.Numerics incluye un conjunto de tipos habilitados para SIMD para .NET.The System.Numerics namespace includes a set of .NET SIMD-enabled types. Las operaciones SIMD (Single Instruction Multiple Data) se pueden paralelizar en el nivel de hardware.SIMD (Single Instruction Multiple Data) operations can be parallelized at the hardware level. Eso aumenta el rendimiento de los cálculos vectorizados, que son comunes en aplicaciones matemáticas, científicas y gráficas.That increases the throughput of the vectorized computations, which are common in mathematical, scientific, and graphics apps.

Los tipos habilitados para SIMD para .NET incluyen los siguientes:The .NET SIMD-enabled types include the following:

  • Los tipos Vector2, Vector3 y Vector4, que representan vectores con los valores Single 2, 3 y 4.The Vector2, Vector3, and Vector4 types, which represent vectors with 2, 3, and 4 Single values.

  • Dos tipos de matriz: Matrix3x2, que representa una matriz de 3x2, y Matrix4x4, que representa una matriz de 4x4.Two matrix types, Matrix3x2, which represents a 3x2 matrix, and Matrix4x4, which represents a 4x4 matrix.

  • El tipo Plane, que representa un plano en un espacio tridimensional.The Plane type, which represents a plane in three-dimensional space.

  • El tipo Quaternion, que representa un vector que se usa para codificar rotaciones físicas tridimensionales.The Quaternion type, which represents a vector that is used to encode three-dimensional physical rotations.

  • El tipo Vector<T>, que representa un vector de un tipo numérico especificado y proporciona un amplio conjunto de operadores que aprovechan la compatibilidad con 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. El recuento de una instancia Vector<T> es fijo, pero su valor Vector<T>.Count depende de la CPU de la máquina, en la que se ejecuta el código.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.

    Nota

    El tipo Vector<T> se incluye con .NET Core, y .NET 5 y versiones posteriores, pero no con .NET Framework.The Vector<T> type is included with .NET Core and .NET 5+, but not .NET Framework. Si usa .NET Framework, instale el paquete NuGet System.Numerics.Vectors para acceder a este tipo.If you're using .NET Framework, install the System.Numerics.Vectors NuGet package to get access to this type.

Los tipos habilitados para SIMD se implementan de tal forma que se pueden utilizar con hardware no habilitado para SIMD o compiladores JIT.The SIMD-enabled types are implemented in such a way that they can be used with non-SIMD-enabled hardware or JIT compilers. Para aprovechar las instrucciones de SIMD, las aplicaciones de 64 bits las debe ejecutar el entorno de ejecución que usa el compilador RyuJIT, que se incluye en .NET Core, y en .NET Framework 4.6 y versiones posteriores.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 .NET Framework 4.6 and later versions. Agrega compatibilidad con SIMD cuando se usan procesadores de 64 bits como destino.It adds SIMD support when targeting 64-bit processors.

Para obtener más información, vea Uso de tipos numéricos acelerados por SIMD.For more information, see Use SIMD-accelerated numeric types.

Vea tambiénSee also