Ir para conteúdo
Fórum Script Brasil
  • 0

Qual o valor maximo para inteiro?


luizf

Pergunta

No programa que estou fazendo é necessario fazer uns calculos, tanto com numeros reais quanto com inteiros.

Quando o valor é muito alto, dá essa mensagem (valor seria o resultado que estourou):

'VALOR' is not a valid integer value

Qual o valor maximo que se pode trabalhar com inteiros, e com reais?

Há algum jeito de contornar esse erro?

Ou como posso tratar esse erro, por exemplo, quando estourar, me retorne o numero máximo que se pode obter e uma mensagem qualquer avisando tal erro.

Procurei na net como tratar esse erro, mas todos que encontrei se tratava de divisão por zero e/ou conversão se string vazia para inteiro ou real.

Abraço

Editado por luizf
Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0
Qual o valor maximo que se pode trabalhar com inteiros, e com reais?

BOOLEAN: Tipo lógico que pode assumir somente os valores TRUE ou FALSE e ocupa 1 byte de memória.

BYTE: Tipo numérico inteiro, pode assumir valores numa faixa de 0 a 255, ocupa 1 byte.

CHAR: Tipo alfa-numérico, pode armazenar um caractere ASCII, ocupa 1 byte.

COMP:Tipo numérico real, pode assumir valores na faixa de -9.2.1018 a 9.2.10+18, ocupa 8 bytes, pode ter entre 19 e 20 algarismos significativos.

EXTENDED: Tipo numérico real, pode assumir valores na faixa de 3,4.10-4932 a +1,1.10+4932, ocupa 10 bytes de memória e tem entre 19 e 20 algarismos significativos.

INTEGER: Tipo numérico inteiro, pode assumir valores numa faixa de -32768 a +32767, ocupa 2 byte de memória.

LONGINT: Tipo numérico inteiro, pode assumir valores numa faixa de -2147483648 a +2147483647, ocupa 4 bytes de memória.

REAL: Tipo numérico real, pode assumir valores na faixa de -2,9.10-39 a +1,7.10+38, ocupa 6 bytes de memória e tem entre 11 e 12 algarismos significativos.

SHORTINT: Tipo numérico inteiro, pode assumir valores numa faixa de -128 a +127, ocupa 1 byte de memória.

SINGLE: Tipo numérico real, pode assumir valores numa faixa de –1,5,10-45 a +3,4.10+38, ocupa 4 bytes de memória, e tem de 7 a 8 algarismos significativos.

WORD: Tipo numérico inteiro, pode assumir valores numa faixa de 0 a 65535, ocupa 2bytes de memória.

STRING: Tipo alfanumérico, possuindo como conteúdo uma cadeia de caracteres. O número de bytes ocupados na memória varia de 2 a 256, dependendo da quantidade máxima de caracteres definidos para a string. O primeiro byte contem a quantidade relativa de caracteres da cadeia.

exemplo:

procedure TForm1.Button1Click(Sender: TObject);
var
  min, max : Integer;

const
  MaxInt = High(Integer);

begin
  // seta o valor minimo e maximo para o tipo de dado
  min := Low(Integer);
  max := High(Integer);
  ShowMessage('Min integer value = '+IntToStr(min));
  ShowMessage('Max integer value = '+IntToStr(max));


  //O valor maximo para um inteiro é normalmente (2^32)-1 = 2,147,483,647
  ShowMessage('Max integer value = '+IntToStr(maxint));
end;

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Deixa ver se entendi.

Quer dizer que quando se usa:

max := High(Integer);

max irá ocupar o ultimo posição dos inteiros?

Se sim, então posso por exemplo usar:

var
  Valor, Max, I, X : Integer;

begin
  .....
  .....
  X:= xxx;
  for I:= 0 to X do
  begin
    .....
    .....
    .....
    if Valor > Max then
      Break;
  end;
end;

E esse High, pode ser usado para inteiro, real, word, longint,...?

Obrigado

Link para o comentário
Compartilhar em outros sites

  • 0

exemplo:

procedure TForm1.Button1Click(Sender: TObject);
var
  max : Integer;

  min, max1 : Int64;

begin
  max := High(Integer);
  ShowMessage('Max integer value = '+IntToStr(max));

  max := High(Shortint);
  ShowMessage('Max Shortint value = '+IntToStr(max));

  max := High(Smallint);
  ShowMessage('Max Smallint value = '+IntToStr(max));

  max := High(Byte);
  ShowMessage('Max Byte value = '+IntToStr(max));

  max := High(Word);
  ShowMessage('Max Word value = '+IntToStr(max));

  max := High(LongWord);
  ShowMessage('Max LongWord value = '+IntToStr(max));

  max := High(Cardinal);
  ShowMessage('Max Cardinal value = '+IntToStr(max));

  min := Low(Int64);
  max1 := High(Int64);
  ShowMessage('Min int64 value = '+IntToStr(min));
  ShowMessage('Max int64 value = '+IntToStr(max1));

end;

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Beleza, agora me dá uma idéia, coloquei um ProgressBar no meu programa, para se ter uma idéia de quanto falta para acabar o processamento.

Mas, o resultado de onde é atualizado o ProgressBar, é um valor Extended, então fiz assim:

ProgressBar1.Max:= Trunc(ValorExtended);

ProgressBar1.Position:= ProgressBar1.Position +1;

Com valores pequenos, ou até onde aceita o Position, beleza, mas tem valores em que tem processamento a rodar, mas estourou o inteiro.

Que idéia voce me dá para contornar isso?

Eu estava pensado em fazer algo como pegar o valor do Extended e usar no ProgressBar1 em escala menor, exemplo.

unit Unit1;
interface
uses......
......

var
  DV: Integer;

implementation

......
......

var
  PosPB: Integer;
begin

  DV:= 2;
  while ValorExtended > High(Integer) do
  begin
    ValorExtended:= ValorExtended / DV;
    DV:= DV+1;
  end;

  ProgressBar1.Max:= Trunc(ValorExtended);
end;

......
E para atualizar o ProgressBar.
if (Trunc(ValorExtended / DV) ) > ProgressBar1.Position then
    ProgressBar1.Position:= ProgressBar1.Position +1;

O que acha, é possível? Alguma idéia melhor?

Obrigado...

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...