Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O .NET fornece um intervalo de inteiros numéricos e primitivos de ponto flutuante, bem como:
- System.Half, que representa um número de ponto flutuante de meia precisão.
- System.Decimal, que representa um número de ponto flutuante decimal.
- System.Numerics.BigInteger, que é um tipo integral sem limite teórico superior ou inferior.
- System.Numerics.Complex, que representa números complexos.
- Um conjunto de tipos habilitados para SIMD no System.Numerics namespace.
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.