VB
.NET - Tipo de dados BigInteger
![]() |
Se você precisa trabalhar com números inteiros absurdamente grandes os tipos de dados Integer e Long talvez não suportem o intervalo numérico com o qual você precisa tratar. |
O tipo de dados Long trata números
inteiros(8 byte) de 64 bit cujo valor varia de
-9.223.372.036.854.775.808 até de
9.223.372.036.854.775.807 (9.2... E+18).
O tipo de dados Integer armazena inteiros de 32 bits (4-byte) com sinal que variam em valor de -2,147,483,648 a 2,147,483,647.
|
Neste caso você pode usar o novo tipo de dados BigInteger disponível a partir da versão 4.0 da plataforma .NET no namespace System.Numerics.
Obs: Você tem que incluir uma referência no seu projeto a System.Numerics e depois usar a declaração Imports System.Numerics;
O tipo de dados BigInteger é um tipo imutável que representa um integer arbitrariamente grande cujo valor teoricamente não tem limite superior ou inferior.
"O tipo BigInteger é um tipo imutável que representa um inteiro arbitrariamente grande, cujo valor, em teoria, não tem limites superiores ou inferiores. Os membros do tipo BigInteger são intimamente paralelos aos de outros tipos integrais (o Byte, Int16, Int32, Int64, SByte, UInt16, UInt32, e os tipos UInt64). Esse tipo difere dos outros tipos integrais na plataforma .NET, que têm um intervalo indicado pelas suas propriedades MinValue e MaxValue."
Como tipo BigInteger é imutável e como ele não possui limites superiores ou inferiores, uma exceção do tipo OutOfMemoryException pode ser lançada para qualquer operação feita com um valor BigInteger que exceda a capacidade de memória.
A
imutabilidade de BigInteger : Como o tipo de dados
BigInteger é imutável você deve tomar cuidado ao
realizar certas operações que podem afetar o desempenho da sua aplicação. Assim o código abaixo : Dim a As BigInteger = 1 Irá resultar na criação de um segundo objeto BigInteger; o que é totalmente transparente para você mas pode afetar seu desempenho. |
Você pode usar a palavra chave new e fornecer qualquer valor integral ou de ponto flutuante como um parâmetro para o construtor BigInteger.(Valores de ponto flutuante são truncados antes de serem atribuídos a BigInteger.). Ex:
Dim bigIntFromDouble As New
BigInteger(179032.6541) Console.WriteLine(bigIntFromDouble) Dim bigIntFromInt64 As New BigInteger(934157136952) Console.WriteLine(bigIntFromInt64) |
O resultado será: 179032 934157136952 |
Você pode declarar uma variável BigInteger e atribuir um valor como faria com qualquer tipo numérico, desde que o valor seja um tipo integral. O exemplo a seguir usa a atribuição para criar um valor BigInteger a partir de um Int64.
Dim valorLong As Long = 6315489358112 Dim bigIntFromLong As BigInteger = valorLong |
A saida será: 6315489358112 |
Você pode usar uma instância de BigInteger como usaria qualquer outro tipo de dados.
O BigInteger sobrecarrega os operadores numéricos padrão para que você possa realizar operações matemáticas básicas, como adição, subtração, divisão, multiplicação, subtração, negação e negação de unário.
Você também pode usar os operadores numéricos padrão para comparar dois valores BigInteger entre si.
Para idiomas que não oferecem suporte a operadores personalizados, a estrutura BigInteger também fornece métodos equivalentes para realizar operações matemáticas.(Ex: Add, Divide, Multiply, Negate, Subtracte muitas outras)
O BigInteger possui muitos métodos estáticos, tais como o Parse(), TryParse(), e ToString() (que também suporta o formato hexadecimal) encontrados em outros tipos de números inteiros, bem como ajudantes matemáticos, tais como Pow(), log(), Log10(), e outros.
Para mostrar a força e o tamanho de um BigInteger vamos criar uma aplicação usando o Visual Basic 2010 Express Edition do tipo Windows Forms com o nome BigInteger_VBNET;
No formulário padrão form1.vb vamos incluir alguns controles Label, TextBox e Button e definir o leiaute conforme a figura abaixo:
![]() |
Após isso no menu Project clique em Add Reference e na aba .NET selecione o item System.Numerics e clique em OK;
![]() |
O código do formulário acima pode ser visto a seguir:
Imports System.Numerics Public Class Form1 Dim N1 As Integer Dim N2 As BigInteger Dim N3 As BigInteger Dim N4 As BigInteger Dim N5 As BigInteger Dim N6 As BigInteger Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load N1 = UInt16.MaxValue N2 = UInt32.MaxValue N3 = UInt64.MaxValue txtNum1.Text = N1.ToString txtNum2.Text = N2.ToString txtNum3.Text = N3.ToString End Sub Private Sub btnCalcular_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCalcular.Click Try N4 = N3 + N3 N5 = N3 * N3 N6 = BigInteger.Pow(N3, 999) txtNum4.Text = N4.ToString txtNum5.Text = N5.ToString txtNum6.Text = N6.ToString Catch memex As OutOfMemoryException MsgBox(" Erro : " + memex.Message) Catch ovex As OverflowException MsgBox(" Erro : " + ovex.Message) Catch ex As Exception MsgBox(" Erro : " + ex.Message) End Try End Sub End Class |
Executando o projeto teremos o seguinte resultado:
![]() |
Considerações sobre o código:
Observe o valor obtido na operação BigInteger.Pow(N3, 999) que eleva o número 18446744073709551615 a potência 999.
Realmente é um número integral muuuuuuuuuuuuuuuuuuito grande.
Note também que eu estou tratando as exceções : OutOfMemoryException e OverflowException antes do tratamento geral Exception.
Para
usar o recurso no .NET Framework 3.5 você
pode tentar fazer o seguinte: Vá para a página de propriedades do projeto para seu projeto e adicione uma referência para o arquivo vjslib.dll. Isso irá adicionar uma referência para as bibliotecas Java incluídas no .NET como parte da linguagem J#. Nessa biblioteca você vai encontrar a estrutura BigInteger. (Eu pessoalmente não testei essa opção) |
Pegue o projeto completo
aqui: BigInteger_VBNET.zip
1Ts 3:9
Pois, que ação de graças podemos render a Deus por vós, por todo o gozo com que nos regozijamos por vossa causa diante do nosso Deus,1Ts 3:10
rogando incessantemente, de noite e de dia, para que possamos ver o vosso rosto e suprir o que falta à vossa fé?1Ts 3:11
Ora, o próprio Deus e Pai nosso e o nosso Senhor Jesus nos abram o caminho até vós,1Ts 3:12
e o Senhor vos faça crescer e abundar em amor uns para com os outros e para com todos, como também nós abundamos para convosco;1Ts 3:13
para vos confirmar os corações, de sorte que sejam irrepreensíveis em santidade diante de nosso Deus e Pai, na vinda de nosso Senhor Jesus com todos os seus santos.Referências:
http://msdn.microsoft.com/en-us/library/system.numerics.biginteger.aspx