Valores numéricos en .NET

.NET proporciona un rango de enteros numéricos y primitivos de punto flotante, así como:

Tipos enteros

.NET admite tipos enteros de 8, 16, 32, 64 y 128 bits con signo y sin signo, que se enumeran en las tablas siguientes.

Tipos enteros con signo

Tipo Tamaño (en bytes) Valor mínimo Valor máximo
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 (en procesos de 32 bits) 4 -2.147.483.648 2\.147.483.647
System.IntPtr (en procesos de 64 bits) 8 -9.223.372.036.854.775.808 9\.223.372.036.854.775.807

Tipos enteros sin signo

Tipo Tamaño (en bytes) Valor mínimo Valor máximo
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 (en procesos de 32 bits) 4 0 4\.294.967.295
System.UIntPtr (en procesos de 64 bits) 8 0 18.446.744.073.709.551.615

Cada tipo de entero admite un conjunto de operadores aritméticos estándar. La clase System.Math proporciona métodos para un conjunto más amplio de funciones matemáticas.

También puede trabajar con los bits individuales de un valor entero usando la clase System.BitConverter.

Nota

Los tipos enteros sin signo no son conformes a CLS. Para obtener más información, consulte Independencia del lenguaje y componentes independientes del lenguaje.

BigInteger

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. Los métodos del tipo BigInteger son análogos a los de otros tipos integrales.

Tipos de punto flotante

.NET incluye los siguientes tipos de punto flotante:

Tipo Tamaño (en bytes) Intervalo aproximado ¿Primitivo? Notas
System.Half 2 ±65504 No Presentado en .NET 5
System.Single 4 ±3,4 x 1038
System.Double 8 ±1,7 × 10308
System.Decimal 16 ±7,9228 x 1028 No

Los tipos Half, Single y Double admiten valores especiales que representan un valor no numérico e infinito. Por ejemplo, el tipo Double proporciona los siguientes valores: Double.NaN, Double.NegativeInfinity y Double.PositiveInfinity. Los métodos Double.IsNaN, Double.IsInfinity, Double.IsPositiveInfinity y Double.IsNegativeInfinity se usan para comprobar estos valores especiales.

Cada tipo de punto flotante admite un conjunto de operadores aritméticos estándar. La clase System.Math proporciona métodos para un conjunto más amplio de funciones matemáticas. .NET Core 2.0 y versiones posteriores incluyen la clase System.MathF que proporciona métodos que aceptan argumentos del tipo Single.

También puede trabajar con los bits individuales de valores Double, Single y Half mediante la clase System.BitConverter. 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.

Los tipos Double, Single y Half están diseñados para usarse con valores que, por su naturaleza, no son precisos (por ejemplo, la distancia entre dos estrellas) y con aplicaciones en las que no se necesita un alto grado de precisión ni un mínimo error de redondeo. 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.

Nota

El tipo Decimal no elimina la necesidad de redondeo. En su lugar, minimiza los errores debido al redondeo.

Complex

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. 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.

Tipos habilitados para SIMD

El espacio de nombres System.Numerics incluye un conjunto de tipos habilitados para SIMD para .NET. Las operaciones SIMD (Single Instruction Multiple Data) se pueden paralelizar en el nivel de hardware. Eso aumenta el rendimiento de los cálculos vectorizados, que son comunes en aplicaciones matemáticas, científicas y gráficas.

Los tipos habilitados para SIMD para .NET incluyen los siguientes:

  • Los tipos Vector2, Vector3 y Vector4, que representan vectores con los valores Single 2, 3 y 4.

  • Dos tipos de matriz: Matrix3x2, que representa una matriz de 3x2, y Matrix4x4, que representa una matriz de 4x4.

  • El tipo Plane, que representa un plano en un espacio tridimensional.

  • El tipo Quaternion, que representa un vector que se usa para codificar rotaciones físicas tridimensionales.

  • 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. 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.

    Nota

    El tipo Vector<T> se incluye con .NET Core, y .NET 5 y versiones posteriores, pero no con .NET Framework. Si usa .NET Framework, instale el paquete NuGet System.Numerics.Vectors para acceder a este tipo.

Los tipos habilitados para SIMD se implementan de tal forma que se pueden utilizar con hardware no habilitado para SIMD o compiladores JIT. 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. Agrega compatibilidad con SIMD cuando se usan procesadores de 64 bits como destino.

Para obtener más información, vea Uso de tipos numéricos acelerados por SIMD.

Vea también