Considere uma máquina que utiliza, base 10, quatro algarismos significativos e expoente c in[-5,5], para representar números reais na forma normalizada pm 0 d1 d2 d3 d4 times 10^c.
© Considere a=4245, b=50 e c=213. Qual o resultado obtido nesta máquina para d e e, calculados de acordo com: d=(a * b) / c e e=a *(b / c). Justifique!

Passo 1

Beleza, vamos entender a parada. A questão é de ponto flutuante decimal: a máquina usa base 10, 4 algarismos significativos e expoentes entre –5 e +5. Os números são guardados sempre numa forma “normalizada”
pm 0d1d2d3d4times 10^c, cin[-5,5]
O que a gente vai precisar:
  • Saber como normalizar um número decimal e garantir 4 dígitos.
  • Entender overflow (expoente fora de [-5,5]).
  • Fazer operações na ordem pedida e aplicar arredondamento (vamos usar “chopping”, isto é, simplesmente cortar depois do quarto dígito).

Passo 2

Primeiro, vamos pôr os dados na forma da máquina:
a) 4245 = 0.4245times 10^4 .
Normaliza assim:
50 = 0.5000times 10^2
(Quatro dígitos: d₁=4, d₂=2, d₃=4, d₄=5; expoente 4 em [-5,5], tudo OK.)
b) 213 = 0.2130times 10^3 .
Normaliza assim:
c) .
Normaliza assim:

Passo 3

Agora vamos calcular
d = atimes bc
em duas etapas, da esquerda pra direita:
  1. Multiplicação (0.4245times10^4)times(0.5000times10^2) = (0.4245cdot0.5000)times10^4+2 = 0.21225times10^6 :
    d = overflow
    Mas aí o expoente deu , e a máquina só aceita de a .
    overflow na etapa intermediária.
    Quando ocorre overflow, a máquina não consegue representar, é “estouro” de faixa.
  2. Como deu overflow em , todo o cálculo de cai em overflow também.
    Logo

Passo 4

Agora a outra ordem,
e = atimesl(b/cr)
Vamos fazer 0.5000times10^20.2130times10^3 = l(0.5000/0.2130r)times10^2-3 = 2.347415dotstimes10^-1 = 0.2347415dotstimes10^0 primeiro:
  1. Divisão b/c approx 0.2347times10^0 :
    (0.4245times10^4)times(0.2347times10^0) = (0.4245cdot0.2347)times10^4+0 = 0.09963015dotstimes10^4
    Cortando (chopping) para 4 dígitos após o zero:
    0.09963015dotstimes10^4 = 0.9963015dotstimes10^3
  2. Agora multiplica por e approx 0.9963times10^3 :
    Repare que 0.09963 está abaixo de 0.1, então ainda não está normalizado (o primeiro dígito depois do ponto tem que ser ≥1 e ≤9). Normaliza movendo um lugar o ponto e baixando 1 no expoente:
    Cortamos para 4 dígitos:

Resposta

d = overflow (estouro de expoente em )
e ≈
Justificativa: como a máquina só aceita expoente até +5, a multiplicação direta gera e dá overflow; já na outra ordem, dividimos primeiro (ficando bem no intervalo) e depois multiplicamos, tudo dentro da faixa, resultando em .

Exercícios relacionados