Compartilhar via


Números em .NET

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

Tipos inteiros

O .NET dá suporte aos tipos de inteiros assinados e sem sinal de 8 bits, 16 bits, 32 bits, 64 bits e 128 bits, listados nas tabelas a seguir.

Tipos inteiros com sinal

Tipo 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 oito -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 um processo de 64 bits) oito -9,223,372,036,854,775,808 9,223,372,036,854,775,807

Tipos inteiros sem sinal

Tipo 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 oito 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 um processo de 64 bits) oito 0 18,446,744,073,709,551,615

Cada tipo inteiro dá suporte a 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.

Observação

Os tipos de inteiro sem sinal não estão em conformidade com CLS. Para obter mais informações, consulte Independência da linguagem 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 paralelos aos dos outros tipos integrais.

Tipos de ponto flutuante

O .NET inclui os seguintes tipos de ponto flutuante:

Tipo Tamanho (em bytes) Intervalo aproximado Primitivo? Anotações
System.Half 2 ±65504 Não Introduzido no .NET 5
System.Single 4 ±3,4 x 1038 Sim
System.Double oito ±1,7 × 10308 Sim
System.Decimal 16 ±7.9228 x 1028 Não

Os tipos Half, Single e Double dão suporte a 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. Você usa os métodos Double.IsNaN, Double.IsInfinity, Double.IsPositiveInfinity e Double.IsNegativeInfinity para testar esses valores especiais.

Cada tipo de ponto flutuante dá suporte a 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.

Também é possível trabalhar com os bits individuais em valores Double, Single e Half usando a classe System.BitConverter. 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 se destinam a ser usados para valores que, por sua natureza, são imprecisos (por exemplo, a distância entre duas estrelas) e para aplicativos nos quais um alto grau de precisão e um pequeno erro de arredondamento não são necessários. Use o System.Decimal tipo para casos em que maior precisão é necessária e erros de arredondamento devem ser minimizados.

Observação

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

Complexo

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

Tipos compatíveis com SIMD

O System.Numerics namespace inclui um conjunto de tipos habilitados para SIMD do .NET. As operações SIMD (Dados Múltiplos de Instrução Única) podem ser paralelizadas no nível do hardware. Isso aumenta a taxa de transferência das computações vetorizadas, que são comuns em aplicativos matemáticos, científicos e gráficos.

Os tipos habilitados para SIMD do .NET incluem o seguinte:

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

  • Dois tipos de matriz, Matrix3x2que 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 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 ao SIMD. A contagem de uma Vector<T> instância é fixa, mas seu valor Vector<T>.Count depende da CPU do computador, na qual o código é executado.

    Observação

    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 forma que possam ser usados com compiladores JIT ou hardware não habilitados para SIMD. Para aproveitar as instruções simd, seus aplicativos de 64 bits devem ser executados pelo runtime que usa o compilador RyuJIT, que está incluído no .NET Core e no .NET Framework 4.6 e versões posteriores. Adiciona suporte a SIMD quando direcionado a processadores de 64 bits.

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

Consulte também