Um sistema de ponto flutuante pode ser expresso pela função
Por exemplo, dado o sistema
, o número
, 15 é representado como
. Dados os sistemas de aritmética de ponto flutuante a seguir, represente os números (utilize truncamento), indicando possíveis casos de underflow e overflow.
102983, 65
102983, 65
Passo 1
O enunciado pede: usar o sistema de ponto flutuante
e representar os números
e
usando truncamento, indicando se há underflow ou overflow.
Informações dadas (peguei tudo do enunciado):
- base
; - número de dígitos da mantissa
; - intervalo de expoentes
(ou seja, e ); - usar truncamento (não arredondamento) ao reduzir a mantissa a
dígitos; - números a representar:
e .
Passo 2
O que significa um número neste sistema e que forma ele deve ter.
- Um número normalizado em
tem a forma
onde cada
é um dígito decimal
e o primeiro dígito da mantissa satisfaz
(ou seja,
). Aqui temos exatamente 3 dígitos na mantissa:
.
- O valor numérico dessa representação é
- O menor número positivo normalizado diferente de zero (magnitude mínima) ocorre com
e :
Qualquer número positivo com magnitude menor que
fará underflow (será representado por zero no formato normalizado, se não houver subnormais).
- O maior número representável (em módulo) ocorre com
e :
Qualquer número com módulo maior que
provoca overflow (não cabe no intervalo de expoentes).
Passo 3
Como converter um número inteiro positivo para a forma normalizada (procedimento que vou aplicar):
- Escrever o número em notação científica com um único algarismo não nulo imediatamente após o ponto decimais no formato
. Ex.: para escolher tal que e . - Truncar a mantissa aos 3 primeiros dígitos
(descartar os dígitos seguintes, sem arredondar). - Verificar se o expoente
obtido está no intervalo permitido . Se ou há overflow ou underflow, respectivamente. - Se
estiver dentro do intervalo, o número truncado é a representação final.
Vou aplicar esse procedimento aos dois números.
Passo 4
Representação de
.
- Colocar em forma normalizada com muitos dígitos para ver onde truncar:
Aqui
e a mantissa iniciando é
. O primeiro dígito
é não nulo, então a normalização está correta.
2. Truncamento aos 3 dígitos da mantissa: pegar . Não há mais dígitos relevantes (os seguintes são zeros), portanto o truncamento não altera o valor exato.
3. Verificar expoente: está dentro do intervalo
.
4. Conclusão: é representável exatamente no formato escolhido como
2. Truncamento aos 3 dígitos da mantissa: pegar
3. Verificar expoente:
4. Conclusão:
Não há underflow nem overflow.
Passo 5
Representação de
.
- Escrever em forma normalizada:
Aqui o expoente necessário para colocar um dígito não nulo como
é
.
2. Truncamento aos 3 dígitos da mantissa (se tentássemos): a mantissa truncada seria , dando o valor aproximado
2. Truncamento aos 3 dígitos da mantissa (se tentássemos): a mantissa truncada seria
- Mas antes mesmo de aceitar essa aproximação temos que checar o intervalo de expoentes permitido: o expoente usado seria
, e o máximo permitido é . Logo . - Conclusão: não existe
dentro de que permita representar um número da ordem de ou . Assim causa overflow no sistema . Mesmo a aproximação truncada excederia o máximo representável , portanto não pode ser armazenada como um número finito neste formato.
Passo 6
Resumo intuitivo e checagem numérica rápida:
- Máximo representável
. Como , é overflow. -
está muito abaixo de e bem acima do mínimo , então é representável exatamente como .
Resposta
Overflow (não representável; excede o máximo
)