Seja um sistema de aritmética de ponto flutuante cuja mantissa tenha \mathrm{t}=3 dígitos, base \mathrm{b}=10, \mathrm{l}=-4 e \mathrm{S}=4. Indique caso haja erro de underflow ou overflow.
Número
Representação por arredondamento
Representação com truncamento
1,25
0,125 \times 10^{1}
0,125 \times 10^{1}
10,053
0,101 \times 10^{2}
0,100 \times 10^{2}
-238,15
0,000000007
718235,82
Passo 1
O enunciado pede que, para um sistema de ponto flutuante com mantissa de t=3 dígitos, base b=10, expoentes limitados por l=-4 e S=4, verifiquemos a representação (por arredondamento e por truncamento) dos números da tabela e indiquemos se há erro de underflow ou overflow.
A forma normalizada adotada é \;0,d_1d_2d_3\times10^{e}\; com d_1\neq0.
Devemos preencher as representações por arredondamento e por truncamento e informar underflow/overflow quando ocorrerem.
Passo 2
Breve aula: como funciona a representação aqui (passo-a-passo didático).
Normalização: qualquer número real não nulo é escrito como
\pm 0,d_1d_2d_3\ldots\times10^{e},
onde d_1 é um dígito não nulo (1 a 9). Apenas os primeiros t=3 dígitos d_1d_2d_3 ficam na mantissa armazenada; os demais são descartados ou usados para decidir o arredondamento. Exemplo genérico: x=0,abcdef\times10^{e} com t=3 fica, por truncamento, 0,abc\times10^{e}; por arredondamento, olhamos o quarto dígito d_4: se d_4\ge5 incrementa-se c (com carry se necessário), senão mantém-se abc.
Limites de magnitude (com estes parâmetros e sem subnormais):
Maior número representável (valor absoluto máximo):
Menor número positivo normalizado (valor absoluto mínimo distinto de 0):
\min_{\text{norm}} = 0,100\times10^{l}.
Aqui l=-4, então
\min_{\text{norm}} = 0,100\times10^{-4}=10^{-5}.
Qualquer número com 0<|x|<\min_{\text{norm}} causa underflow (se o sistema não tiver subnormais) e tipicamente é truncado para zero.
Regras práticas de arredondamento e truncamento usadas aqui:
Truncamento (chop): descarta-se tudo após os t dígitos da mantissa.
Arredondamento para o mais próximo (round-to-nearest, tie-breaking half-up para simplicidade): olhar o dígito imediatamente seguinte; se \ge5 incrementa o último dígito mantido, senão mantém.
Agora aplicamos essas ideias a cada número.
Passo 3
Número 1,25.
Normalização: 1,25 = 0,125\times10^{1}.
Mantissa já tem exatamente 3 dígitos d_1d_2d_3=125; não há dígitos extras para truncar/arredondar.
Expoente e=1 está no intervalo [-4,4]. Não há underflow nem overflow.
Mantissa inicial com mais dígitos: 0,10053. Os três dígitos significativos são d_1d_2d_3=100. O quarto dígito (para decidir arredondamento) é 5.
Truncamento: descarta-se a parte após os três dígitos, ficando 0,100\times10^{2}.
Arredondamento: como o quarto dígito é 5 (metade), aplicando o esquema half-up incrementa-se o último dígito mantido: 0,100\to0,101. Assim 0,101\times10^{2}.
Expoente e=2 está em [-4,4], logo não há underflow/overflow.
Portanto:
Arredondamento: 0,101\times10^{2}.
Truncamento: 0,100\times10^{2}.
Passo 5
Número -238,15.
Normalização: -238,15 = -0,23815\times10^{3}.
Mantissa inicial 0,23815. Os três dígitos mantidos são 238. O quarto dígito é 1.
Truncamento: -0,238\times10^{3}.
Arredondamento: quarto dígito 1<5, então não há incremento; portanto também -0,238\times10^{3}.
Expoente e=3 está em [-4,4], portanto sem underflow/overflow.
Portanto:
Arredondamento: -0,238\times10^{3}.
Truncamento: -0,238\times10^{3}.
Passo 6
Número 0,000000007.
Escrever em potência de 10: 0,000000007 = 7\times10^{-9} = 0,7\times10^{-8}. A forma normalizada com primeiro dígito não nulo seria 0,700\ldots\times10^{-8}.
Expoente necessário e=-8. Mas o menor expoente permitido é l=-4. Assim |x|=7\times10^{-9} é muito pequeno para ser representado como número normalizado no intervalo de expoentes disponíveis.
Comparando com o menor normalizado: \min_{\text{norm}}=10^{-5}, temos 7\times10^{-9}<10^{-5}. Portanto, sem subnormais suportados, o valor não é representável e resulta em underflow para zero. Tanto truncamento quanto arredondamento produzem 0 (ou sinal +0 se se preservar o sinal). Isso é underflow.
Portanto:
Arredondamento: 0 (underflow).
Truncamento: 0 (underflow).
Passo 7
Número 718235,82.
Normalização: 718235,82 = 0,71823582\times10^{6}.
Expoente necessário e=6. O maior expoente permitido é S=4. Como 6>4, o número está fora do intervalo de expoentes.
Mesmo se truncássemos ou arredondássemos a mantissa para 0,718\times10^{6} ou 0,719\times10^{6}, o expoente continuaria 6 e portanto ainda estaria fora do intervalo. Logo ocorre overflow (valor absoluto maior que \max=9990). Normalmente isto resulta em \pm\infty ou erro de overflow; aqui indicamos overflow.
Portanto:
Arredondamento: overflow (não representável como número finito no formato).
Truncamento: overflow (não representável como número finito no formato).
Passo 8
Resumo final preenchendo as entradas faltantes (já calculadas acima):
1,25: arredondamento 0,125\times10^{1}, truncamento 0,125\times10^{1}. (sem erro)
10,053: arredondamento 0,101\times10^{2}, truncamento 0,100\times10^{2}. (sem erro)
-238,15: arredondamento -0,238\times10^{3}, truncamento -0,238\times10^{3}. (sem erro)