Mat01099 - Seminário Integrador III - UFRGS

Prof. João Batista Carvalho

Como podemos dividir usando somas e produtos

Objetivo: em máquinas digitais, as operações de soma e produto de números, em aritmética ponto-flutuante, são implementadas em hardware. Todas as outras operações numéricas, incluindo a própria divisão ponto-flutuante, devem ser implementadas usando somas e produtos. Desenvolveremos fundamentação matemática para a divisão usando somas e produtos.

Imaginando o contexto de um sistema ponto-flutuante generalizado FL(B,p,L,U), em que números reais são representados na forma normalizada, sejam dois números

$\displaystyle x = (-1)^{s_x} m_x B^{E_x} \ , \
y = (-1)^{s_y} m_y B^{E_y}$
o que implica
$\displaystyle \frac{x}{y} = \frac{(-1)^{s_x} m_x B^{E_x} }{(-1)^{s_y} m_y B^{E_y}} =
(-1)^{s_x-s_y} \frac{m_x}{m_y} B^{E_x-E_y}$
e assim precisamos multiplicar $m_x$ pelo inverso multiplicativo de $m_y$, operar os sinais e os expoentes, e ajustar a representação.

Estratégia colegial: Um método que pode ser usado para calcular o inverso de um número $u \in (0,1)$ dado é escrever $\displaystyle \frac{1}{u}$ como

$\displaystyle \frac{1}{u} = \frac{1}{1-q} = 1 + q + q^2 + q^3 + q^4 + \dots $
e então avaliar a sequência de termos parciais $s_n$ que converge à soma da progressão geométrica infinita acima pois $\vert q\vert = \vert 1-u\vert < 1$. Além disso, pode-se mostrar que $\{s_n\}$ satisfaz a relação de recorrência $s_{n+1} = 1 + q \cdot s_n$.

Exercício: calcular a divisão ponto-flutuante $12.78/7.27$.

Temos $m_x = 0.1278$, $E_x=2$, $m_y = 0.727$, $E_y=1$ e então

$\displaystyle \frac{1}{0.727} = \frac{1}{1-0.273} = 1 + 0.273 + (0.273)^2
+ (0.273)^3 + \dots +$
e temos a sequência de aproximações
$n$ $s_n$ $n$ $s_n$
0 1. 7 1.3754734
1 1.273 8 1.3755042
2 1.347529 9 1.3755127
3 1.3678754 10 1.375515
4 1.37343 11 1.3755156
5 1.3749464 12 1.3755158
6 1.3753604 13 1.3755158
onde $0.1278 \cdot 0.13755158 \cdot 10^1 = 0.1757909$. Finalmente, temos
$\displaystyle \frac{12.78}{7.27} = 0.1757909 \cdot 10^{2-1} = 1.757909$

Estratégia oficial: observamos que $u$, o inverso multiplicativo de $m_y$, satisfaz o problema de raízes $ f(u) = 1/u - m_y = 0$. A aplicação do Método de Newton então produz

$\displaystyle u_{n+1} = u_n - \frac{1/u_n - m_y}{-1/u_n^2} =
u_n + (1- m_y \cdot u_n)u_n$.

Escolhemos $u_0 > 0$ e menor que o valor exato de $1/m_y$, para que então $f(u_0) > 0$ e $f''(u_0) = 2/u_0^3 > 0$, e a convergência esteja garantida pelo Critério de Fourier.

Por outro lado, se $B=10$, temos

$10^{-1} \leq m_y < 1$, e que implica $ \displaystyle 1 < \frac{1}{m_y} \leq 10$

e então é seguro usar $u_0 = 1$.

Exercício: calcular a divisão ponto-flutuante $12.78/7.27$.

Temos $m_x = 0.1278$, $E_x=2$, $m_y = 0.727$, $E_y=1$ . A sequência NR é

$\displaystyle \left\{ \begin{array}{lr}
u_0 = 1 & \\
u_{n+1} = u_n + (1-0.727 u_n) u_n &, n=0,1,2,\dots
\end{array} \right. $
que produz
$n$ $u_n$ $n$ $u_n$
0 1 3 1.3754734
1 1.273 4 1.3755158
2 1.3678754 5 1.3755158
onde $0.1278 \cdot 0.13755158 \cdot 10^1 = 0.1757909$. Finalmente, temos
$\displaystyle \frac{12.78}{7.27} = 0.1757909 \cdot 10^{2-1} = 1.757909$



Joao Batista Carvalho 2014-04-04