Utilizando o Octave, investigue na prática o que ocorre quando uma operação numérica gera overflow ou underflow em aritmética de ponto flutuante.
Execute os seguintes comandos:
Com base nos resultados obtidos, responda:
(a) O que o OCTAVE retorna no caso da variável a? Esse resultado indica overflow ou underflow?
(b) O que o Octave retorna no caso da variável b? Esse resultado indica overflow ou underflow?
(c) Explique, com suas palavras, por que esses resultados ocorrem.
(d) Pesquise no Octave os comandos realmax e realmin. Compare os valores obtidos com os resultados anteriores.
No Octave, quando o resultado de uma operação excede o maior número representável, o sistema normalmente retorna Inf. Quando o resultado possui magnitude menor que o menor número positivo representável, o sistema pode retornar 0.
(a) O que o OCTAVE retorna no caso da variável a? Esse resultado indica overflow ou underflow?
(b) O que o Octave retorna no caso da variável b? Esse resultado indica overflow ou underflow?
(c) Explique, com suas palavras, por que esses resultados ocorrem.
(d) Pesquise no Octave os comandos realmax e realmin. Compare os valores obtidos com os resultados anteriores.
Passo 1
O enunciado pede que eu execute no Octave duas operações e, com base nos resultados, responda quatro itens. Vou listar claramente o que é pedido e quais são os dados fornecidos.
-
Comandos para executar no Octave (escritos aqui com notação matemática):
-
-
Perguntas a responder:
(a) O que o Octave retorna para a variável? Isso indica overflow ou underflow?
(b) O que o Octave retorna para a variável? Isso indica overflow ou underflow?
(c) Explicar, em palavras, por que esses resultados ocorrem.
(d) Usar os comandose no Octave e comparar os valores obtidos com os resultados anteriores.
Passo 2
Vou indicar os comandos que se executariam no Octave e o resultado esperado para
. Primeiro raciocínio simples do cálculo:
Sabemos que números em ponto-flutuante de precisão dupla (o padrão do Octave) têm um maior valor finito representável chamado
. Como
é muito maior que esse limite, o Octave não consegue representar o resultado como um número finito. O comportamento conforme IEEE-754 é retornar infinito positivo. No Octave isso aparece como:
Este resultado indica overflow (o valor excedeu o maior número representável).
Passo 3
Agora a variável
. Primeiro cálculo direto:
Compare esse valor com o menor número positivo normalizável (
) no formato double: esse valor é da ordem de
(mais precisamente
). Logo
é menor que
. Entretanto, a representação IEEE-754 de dupla precisão permite números denormalizados (subnormais) até um mínimo muito pequeno:
Como
é bem maior que
, ele está dentro da faixa dos subnormais e portanto pode ser representado (com menos precisão) como um número não nulo. Assim, o Octave normalmente imprime algo como
(em notação arredondada). Isso não é um overflow; trata-se de um resultado “tímido” menor que
— é um caso de underflow em sentido estrito do flag IEEE (valor muito pequeno), mas o valor não foi levado a zero: foi representado como subnormal (gradual underflow).
Passo 4
Explicando a teoria por trás — aula curta, sem pular etapas:
- Representação double (IEEE-754, usada pelo Octave): um número é armazenado como sinal, expoente e mantissa (fracionário). Há limites para o maior expoente e menor expoente normalizável.
- O maior número finito aproximado (valor de
) é Qualquer cálculo que produza um número maior que isso não pode ser representado como um número finito — o resultado torna-se . Isso é chamado de overflow. - O menor número positivo normalizado (valor de
) é Valores menores que ainda podem ser representados como números subnormais (denormalizados) até o menor subnormal Quando o resultado da operação está entre esse menor subnormal e , o sistema usa representações subnormais (com menos precisão) — isso é chamado gradual underflow. Se o resultado tiver magnitude ainda menor que , ele é arredondado para zero (underflow absoluto, resultado = ).
Passo 5
Comandos Octave úteis e comparação (indicar o que executar e o que eles retornam):
- No Octave:
-
retorna aproximadamente -
retorna aproximadamente
-
- Comparando com os resultados anteriores:
- O valor calculado para
( ) é muito maior que , explicando o . - O valor calculado para
( ) é menor que mas muito maior que o menor subnormal , por isso é representável como subnormal em vez de zero.
- O valor calculado para
Passo 6
Comentando comportamento prático no Octave e como detetar:
- Para detectar overflow: use
— devolve se . - Para verificar se um número é finito:
. - Para ver se um resultado tiny virou zero: compare com zero ou use
. - Observação sobre flags: a CPU/IEEE pode ter bandeiras de exceção (overflow, underflow, inexact), mas o Octave normalmente não imprime essas flags automaticamente — em geral, o programador verifica valores especiais (
, , ).
Passo 7
Resumo intuitivo (para lembrar na prova):
- “Overflow” ocorre quando o resultado é maior que o maior número finito representável; Octave mostra
. Ex.: - “Underflow” no sentido de perder magnitude pode ocorrer de duas formas:
- Gradual underflow: resultado fica menor que
mas maior que o menor subnormal; o sistema produz um número subnormal (não-zero, com menos precisão). Ex.: tende a ser representado como subnormal, não zero. - Underflow absoluto: resultado é menor que o menor subnormal (aprox.
); então o resultado é .
- Gradual underflow: resultado fica menor que
- Lembre-se de comparar sempre com
e para prever overflow/underflow.
Resposta
(a)
— indica overflow.
(b) (valor subnormal, não zero) — é um caso de underflow gradual (não é overflow nem necessariamente zero).
(c) Porque números em double têm limites: se o resultado excede vira
(overflow); se o resultado fica abaixo de
pode ser representado como subnormal (gradual underflow) ou, se for menor que o menor subnormal
, arredondado para
. No caso dado,
causa
, e
mas
menor subnormal, por isso resulta em um subnormal não nulo.
(d) e
. Comparando:
explica o
;
mas
explica que o valor se torna subnormal (não zero).
(b)
(c) Porque números em double têm limites: se o resultado excede
(d)