Compartir por


Valores numéricos en .NET

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

Tipos enteros

.NET admite tipos enteros con signo y sin signo de 8 bits, 16 bits, 32 bits, 64 bits y 128 bits, 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 entero admite un conjunto de operadores aritméticos estándar. La System.Math clase proporciona métodos para un conjunto más amplio de funciones matemáticas.

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

Nota:

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

BigInteger

La System.Numerics.BigInteger estructura es un tipo inmutable que representa un entero arbitrariamente grande cuyo valor en teoría no tiene límites superiores o inferiores. Los métodos del tipo BigInteger se asemejan estrechamente 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 Introducido 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 no es un número e infinito. Por ejemplo, el Double tipo proporciona los siguientes valores: Double.NaN, Double.NegativeInfinityy Double.PositiveInfinity. Use los Double.IsNaNmétodos , Double.IsInfinity, Double.IsPositiveInfinityy Double.IsNegativeInfinity para probar estos valores especiales.

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

También puede trabajar con los bits individuales de Double, Single, y Half mediante la clase System.BitConverter. La System.Decimal estructura tiene sus propios métodos, Decimal.GetBits y Decimal(Int32[]), para trabajar con bits individuales de un valor decimal, así como su propio conjunto de métodos para realizar algunas operaciones matemáticas adicionales.

Los Doubletipos , Singley Half están diseñados para usarse para los valores que, por su naturaleza, son imprecisos (por ejemplo, la distancia entre dos estrellas) y para las aplicaciones en las que no se requiere un alto grado de precisión y un pequeño error de redondeo. Use el System.Decimal tipo para los casos en los que se requiere mayor precisión y se deben minimizar los errores de redondeo.

Nota:

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

Complejo

La System.Numerics.Complex estructura representa un número complejo, es decir, un número con una parte de número real y una parte de número imaginaria. Admite un conjunto estándar de operadores de conversión aritméticos, de comparación, de igualdad, explícitos e implícitos, así como de 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 (datos múltiples de instrucción única) se pueden paralelizar en el nivel de hardware. Esto aumenta el rendimiento de los cálculos vectorizados, que son comunes en las aplicaciones matemáticas, científicas y gráficas.

Los tipos habilitados para SIMD de .NET incluyen lo siguiente:

  • Los Vector2tipos , Vector3y Vector4 , que representan vectores con 2, 3 y 4 Single valores.

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

  • Tipo Plane , que representa un plano en espacio tridimensional.

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

  • El Vector<T> tipo, que representa un vector de un tipo numérico especificado y proporciona un amplio conjunto de operadores que se benefician de la compatibilidad con SIMD. El recuento de una Vector<T> instancia 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 Vector<T> tipo se incluye con .NET Core y .NET 5+, pero no con .NET Framework. Si usa .NET Framework, instale el paquete NuGet System.Numerics.Vectors para obtener acceso a este tipo.

Los tipos habilitados para SIMD se implementan de forma que se pueden usar con compiladores JIT o hardware no habilitados para SIMD. Para aprovechar las instrucciones de SIMD, el entorno de ejecución debe ejecutar las aplicaciones de 64 bits que usa el compilador RyuJIT, que se incluye en .NET Core y en .NET Framework 4.6 y versiones posteriores. Agrega compatibilidad con SIMD al tener como destino procesadores de 64 bits.

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

Consulte también