Valores numéricos en .NET
.NET proporciona un rango de enteros numéricos y primitivos de punto flotante, así como:
- System.Half, que representa un número de punto flotante de precisión media.
- System.Decimal, que representa un número de punto flotante que es decimal.
- System.Numerics.BigInteger, que es un tipo entero sin límite superior o inferior teórico.
- System.Numerics.Complex, que representa números complejos.
- Conjunto de tipos habilitados para SIMD en el espacio de nombres System.Numerics.
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 | Sí | |
System.Double | 8 | ±1,7 × 10308 | Sí | |
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.