Partilhar via


Números no .NET

O .NET fornece um intervalo de inteiros numéricos e primitivos de ponto flutuante, bem como:

Tipos inteiros

O .NET oferece suporte aos tipos inteiros de 8 bits, 16 bits, 32 bits, 64 bits e 128 bits assinados e não assinados, listados nas tabelas a seguir.

Tipos inteiros assinados

Type Tamanho (em 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 (em processo de 32 bits) 4 -2,147,483,648 2,147,483,647
System.IntPtr (em processo de 64 bits) 8 -9,223,372,036,854,775,808 9,223,372,036,854,775,807

Tipos inteiros não assinados

Type Tamanho (em 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 (em processo de 32 bits) 4 0 4,294,967,295
System.UIntPtr (em processo de 64 bits) 8 0 18,446,744,073,709,551,615

Cada tipo de inteiro suporta um conjunto de operadores aritméticos padrão. A System.Math classe fornece métodos para um conjunto mais amplo de funções matemáticas.

Você também pode trabalhar com os bits individuais em um valor inteiro usando a System.BitConverter classe.

Nota

Os tipos inteiros não assinados não são compatíveis com CLS. Para obter mais informações, consulte Independência de idioma e componentes independentes de idioma.

BigInteger

A System.Numerics.BigInteger estrutura é um tipo imutável que representa um inteiro arbitrariamente grande cujo valor em teoria não tem limites superiores ou inferiores. Os métodos do BigInteger tipo são muito paralelos aos dos outros tipos integrais.

Tipos de vírgula flutuante

O .NET inclui os seguintes tipos de ponto flutuante:

Type Tamanho (em bytes) Intervalo aproximado Primitivo? Notas
System.Half 2 ±65504 Não Introduzido no .NET 5
System.Single 4 ±3,4 x 1038 Sim
System.Double 8 ±1.7 × 10308 Sim
System.Decimal 16 ±7,9228 x 1028 Não

Os Halftipos , Single, e Double suportam valores especiais que representam não-um-número e infinito. Por exemplo, o Double tipo fornece os seguintes valores: Double.NaN, Double.NegativeInfinitye Double.PositiveInfinity. Use os Double.IsNaNmétodos , Double.IsInfinity, Double.IsPositiveInfinity, e para Double.IsNegativeInfinity testar esses valores especiais.

Cada tipo de ponto flutuante suporta um conjunto de operadores aritméticos padrão. A System.Math classe fornece métodos para um conjunto mais amplo de funções matemáticas. O .NET Core 2.0 e posterior inclui a System.MathF classe, que fornece métodos que aceitam argumentos do Single tipo.

Você também pode trabalhar com os bits individuais em Double, Singlee Half valores usando a System.BitConverter classe. A System.Decimal estrutura tem seus próprios métodos, Decimal.GetBits e Decimal(Int32[]), para trabalhar com bits individuais de um valor decimal, bem como seu próprio conjunto de métodos para executar algumas operações matemáticas adicionais.

Os Doubletipos , Singlee Half destinam-se a ser utilizados para valores que, pela sua natureza, são imprecisos (por exemplo, a distância entre duas estrelas) e para aplicações em que não é necessário um elevado grau de precisão e pequenos erros de arredondamento. Use o System.Decimal tipo para casos em que é necessária maior precisão e os erros de arredondamento devem ser minimizados.

Nota

O Decimal tipo não elimina a necessidade de arredondamento. Em vez disso, minimiza os erros devido ao arredondamento.

Complex

A System.Numerics.Complex estrutura representa um número complexo, isto é, um número com uma parte numérica real e uma parte numérica imaginária. Ele suporta um conjunto padrão de operadores de conversão aritmética, comparação, igualdade, explícitos e implícitos, bem como métodos matemáticos, algébricos e trigonométricos.

Tipos habilitados para SIMD

O System.Numerics namespace inclui um conjunto de tipos habilitados para .NET SIMD. As operações SIMD (Single Instruction Multiple Data) podem ser paralelizadas no nível de hardware. Isso aumenta a taxa de transferência dos cálculos vetorizados, que são comuns em aplicativos matemáticos, científicos e gráficos.

Os tipos habilitados para .NET SIMD incluem o seguinte:

  • O Vector2, Vector3, e Vector4 tipos, que representam vetores com 2, 3 e 4 Single valores.

  • Dois tipos de matriz, Matrix3x2, que representa uma matriz 3x2, e Matrix4x4, que representa uma matriz 4x4.

  • O Plane tipo, que representa um plano no espaço tridimensional.

  • O Quaternion tipo, que representa um vetor que é usado para codificar rotações físicas tridimensionais.

  • O Vector<T> tipo, que representa um vetor de um tipo numérico especificado e fornece um amplo conjunto de operadores que se beneficiam do suporte a SIMD. A contagem de uma Vector<T> instância é fixa, mas seu valor Vector<T>.Count depende da CPU da máquina, na qual o código é executado.

    Nota

    O Vector<T> tipo está incluído no .NET Core e no .NET 5+, mas não no .NET Framework. Se você estiver usando o .NET Framework, instale o pacote NuGet System.Numerics.Vectors para obter acesso a esse tipo.

Os tipos habilitados para SIMD são implementados de tal forma que podem ser usados com hardware não habilitado para SIMD ou compiladores JIT. Para aproveitar as instruções do SIMD, seus aplicativos de 64 bits devem ser executados pelo tempo de execução que usa o compilador RyuJIT, que está incluído no .NET Core e no .NET Framework 4.6 e versões posteriores. Ele adiciona suporte a SIMD ao direcionar processadores de 64 bits.

Para obter mais informações, consulte Usar tipos numéricos acelerados por SIMD.

Consulte também