Seja um sistema de aritmética de ponto flutuante de quatro dígitos, base decimal e com acumulador de precisão dupla. Dados os números: x=0.3979 \times 10^{2}, y= 0.1511 \times 10^{-3} e z=0.1234 \times 10^{1}, calcule (x-y) \div z e obtenha o limitante superior do erro relativo referente a este cálculo. Considere que x, y e z não são exatamente representados.
Passo 1
O enunciado pede duas coisas bem claras:
Calcular em aritmética de ponto flutuante de quatro dígitos (base decimal, com acumulador de precisão dupla) o valor de \displaystyle (x-y)\div z usando os números fornecidos.
Encontrar um limitante superior para o erro relativo desse cálculo, considerando que x, y e z não são representados exatamente na máquina (isto é, sofrem arredondamento ao serem armazenados).
Informações dadas (peguei estes valores do enunciado):
\displaystyle x = 0{,}3979\times10^{2} (ou seja \;x=39{,}79)
\displaystyle y = 0{,}1511\times10^{-3} (ou seja \;y=0{,}0001511)
\displaystyle z = 0{,}1234\times10^{1} (ou seja \;z=1{,}234)
A mantissa tem p=4 dígitos (base b=10).
Há um acumulador de precisão dupla (isso significa que a subtração pode ser feita com maior precisão evitando arredondamento imediato; eu vou explicar como isso entra no cálculo do erro).
Passo 2
Primeira lição rápida: como modelamos o arredondamento em ponto flutuante.
Em uma máquina com p dígitos decimais e arredondamento para o mais próximo, o erro relativo na representação de qualquer número é limitado por
Modelo habitual: se \widehat{x} é a representação de x na máquina, então existe \varepsilon_x com |\varepsilon_x|\le u tal que
\widehat{x}=x(1+\varepsilon_x).
Mesma coisa para \widehat{y} e \widehat{z}.
Comentário sobre acumulador de precisão dupla:
A subtração x-y será feita em acumulador de precisão dupla (mantissa com 2p=8 dígitos). Isso reduz muito o erro de arredondamento nessa operação intermédia; portanto podemos considerar que a subtração entre os valores já armazenados \widehat{x}-\widehat{y} não introduz um erro de arredondamento relevante (ou seja, o erro de arredondamento dessa etapa é da ordem do u correspondente a p'=8, que é desprezível comparado a u de p=4). O arredondamento que interessa ao final é o da operação inteira (na forma final que a máquina dá), que será novamente com p=4. Vou usar esse fato para simplificar a estimativa do limitante superior.
Passo 3
Escrevendo algebraicamente o que a máquina de fato calcula.
Seja r o resultado exato desejado:
r=\frac{x-y}{z}.
A máquina armazena \widehat{x}=x(1+\varepsilon_x), \widehat{y}=y(1+\varepsilon_y), \widehat{z}=z(1+\varepsilon_z), com |\varepsilon_x|,|\varepsilon_y|,|\varepsilon_z|\le u.
A subtração é feita em dupla precisão sem arredondamento relevante, então tomamos
A divisão é feita por \widehat{z} e o resultado final é arredondado a p=4 dígitos; assim o valor final computado pela máquina pode ser representado como
\widehat{r}=\Big(\frac{t}{\widehat{z}}\Big)(1+\varepsilon_{\rm op}), \qquad |\varepsilon_{\rm op}|\le u,
onde \varepsilon_{\rm op} representa o arredondamento final da operação de divisão (ou do armazenamento do resultado).
Passo 4
Derivando um limitante para o erro relativo (passo a passo, sem pular etapas).
Começamos por escrever \dfrac{t}{\widehat{z}} em termos de r:
Agora queremos um limitante para o erro relativo \dfrac{|\widehat{r}-r|}{|r|}. É conveniente linearizar (primeira ordem) porque todos os \varepsilon são pequenos (|\varepsilon|\le u\ll1). Usando a aproximação de primeira ordem (1+\alpha)^{-1}\approx 1-\alpha e desprezando termos de ordem \varepsilon^2, temos
Assim um limitante superior para o erro relativo é aproximadamente \;1{,}500004\times10^{-3} (ou, arredondando razoavelmente, 1{,}5\times10^{-3}).
Passo 6
Vamos também mostrar o valor que a máquina efetivamente retorna quando fazemos as contas com as regras de arredondamento de quatro dígitos (isso ajuda a entender o sentido do limitante).
As representações dadas já têm quatro dígitos, então \widehat{x}=0{,}3979\times10^{2}, \widehat{y}=0{,}1511\times10^{-3}, \widehat{z}=0{,}1234\times10^{1}.
Subtração em dupla precisão (sem arredondamento relevante):
Dividindo por \widehat{z}=1{,}234 (fazendo a divisão com precisão suficiente) obtemos
\frac{t}{\widehat{z}}\approx 32{,}24461013\ldots
Agora arredondamos o resultado para quatro dígitos de mantissa (normalização decimal). Em forma normalizada essa quantidade é 0{,}3224461013\times10^{2}. Com quatro dígitos o mantissa fica 0{,}3224 (o quinto dígito é 4, então arredonda para baixo), logo a máquina entrega
\widehat{r}=0{,}3224\times10^{2}=32{,}24.
O valor exato r (sem considerar arredondamentos de armazenamento) é aproximadamente r\approx32{,}24461013. A diferença absoluta é 32{,}24461013-32{,}24=0{,}00461013 e o erro relativo observado é