Você está na página 1de 4

cálculo numérico Prof.

Valter Moitinho

Aula 02 Erros
1.1 Conversão de números no sistema binário e decimal

Vamos dividir nossa análise em números inteiros e decimais. Iniciamos com os números
inteiros.

Denição 1.1 Um número numa base β, escrito na forma (aj aj−1 · · · a2 a1 a0 )β com 0 ⩽ ak ⩽
(β − 1) para todo k = 1, . . . , j , pode ser escrito na forma polinomial

aj β j + aj−1 β j−1 + . . . + a2 β 2 + a1 β 1 + a0 β 0 . (1.1)

A representação (1.1) é a conversão do número na base β para o sistema decimal.

Exemplo 1.2 A seguir temos um exemplo de conversão para o sistema decimal (β = 10).

(347)10 = 3 × 102 + 4 × 10 + 7 = 347.

Exemplo 1.3 A seguir temos um exemplo de conversão do sistema binário (β = 2) para o


decimal.
(10111)10 = 1 × 24 + 0 × 23 + 1 × 22 + 1 × 21 + 1 × 20 = (23)10 .

Veremos agora um processo para converter um número inteiro representado no sistema


decimal para o sistema binário. Para ilustrar o processo, considere o número N = (347)10 e
(aj aj − 1 · · · a1 a0 )2 a sua representação no sistema binário. Segue que

347 =aj × 2j + aj−1 × 2j−1 + . . . + a2 × 22 + a1 × 21 + a0 × 20


=2 × aj × 2j−1 + aj−1 × 2j−2 + . . . + a2 × 2 + a1 + a0


=2 × 173 + 1

e dessa forma, o dígito a0 = 1 representa o resto da divisão de 347 por 2. Repetindo agora este
processo para o número N1 = 173, obtemos

173 = aj × 2j−1 + aj−1 × 2j−2 + . . . + a2 × 2 + a1

obteremos o dígito a1 , que será o resto da divisão de N1 por 2. Seguindo este raciocínio obtemos
a sequência de números Nj e aj .
Prosseguindo dessa forma, obtemos

N0 = 347 = 2 × 173 + 1 ⇒ a0 =1
N1 = 173 = 2 × 86 + 1 ⇒ a1 =1
N2 = 86 = 2 × 43 + 0 ⇒ a2 =0
N3 = 43 = 2 × 21 + 1 ⇒ a3 =1
N4 = 21 = 2 × 10 + 1 ⇒ a4 =1
N5 = 10 = 2 × 5 + 0 ⇒ a5 =0
N6 =5=2×2+1 ⇒ a6 =1
N7 =2 =2×1+0 ⇒ a7 =0
N8 =1 =2×0+1 ⇒ a8 =1

1
cálculo numérico Prof. Valter Moitinho

Portanto, a representação de (347)10 na base 2 será (101011011)2 .


Agora, iremos considerar a conversão de um número fracionário do sistema decimal para
o sistema binário. Por exemplo, temos os seguintes números entre 0 e 1 no sistema decimal

r = 0.125, s = 0.66666 . . . , t = 0.414213562 . . .

Observe que r tem representação nita e que s e t têm representação innita.


Para ilustrar a conversão de números entre 0 e 1 no sistema decimal para o binário,
considere o número r = 0.125. Então existem dígitos binários d1 , d2 , . . . , dj , . . . tais que
(0.d1 d2 . . . dj . . .)2 será sua representação na base 2. Portanto,

(0.125)10 = d1 × 2−1 + d2 × 2−2 + . . . + dj × 2−j + . . .

Multiplicando cada termo da expressão acima por 2, obtemos que

0.250 = 0 + 0.25 = d1 + d2 × 2−1 + d3 × 2−2 + . . . + dj × 2−j+1 + . . .

Portanto, d1 representa a parte inteira de 2 × 0.125 que é igual a zero e d2 × 2−1 + d3 × 2−2 +
. . . + dj × 2−j+1 + . . . representa a parte fracionária de 2 × 0.125. Aplicando agora o mesmo
procedimento para 0.250, temos que

0.250 = d2 × 2−1 + d3 × 2−2 + . . . + dj × 2−j+1 + . . .

e por conseguinte,

0.5 = d2 + d3 × 2−1 + d4 × 2−2 + . . . + dj × 2−j+2 + . . . ⇒ d2 = 0

Repetindo o processo para 0.5, concluímos que


0.5 = d3 × 2−1 + d4 × 2−2 + . . . + dj × 2−j+2 + . . .
2 × 0.5 = 1.0 = d3 + d4 × 2−1 + . . . + dj × 2−j+3 + . . . ⇒ d3 = 1

Como a parte fracionária de 2 × 0.5 é zero, o processo de conversão termina com d1 = 0, d2 = 0


e d3 = 1 e dessa forma, o número (0.125)10 tem a representação nita (0.001)2 na base 2 .
No caso geral, seja r um número entre 0 e 1 no sistema decimal e (0.d1 d2 . . . dj . . .)2 sua
representação no sistema binário. Os dígitos binários d1 , d2 , . . . , dj , . . . são obtidos através do
seguinte algoritmo:
Passo 0: r1 = r e k = 1
Passo 1: Calcule 2rk .
Se 2rk ⩾ 1, faça dk = 1. Caso contrário, faça dk = 0.
Passo 2: Faça rk+1 = 2rk − dk .
Se rk+1 = 0, pare. Caso contrário, vá para o próximo passo.
Passo 3: k = k + 1. Volte ao passo 1.

2
cálculo numérico Prof. Valter Moitinho

Exemplo 1.4 Para ilustrar o algoritmo, considere r = (0.1)10 .


r1 = 0.1
k = 1 2r1 = 0.2 ⇒ d1 = 0
r2 = 0.2
k = 2 2r2 = 0.4 ⇒ d2 = 0
r3 = 0.4
k = 3 2r3 = 0.8 ⇒ d3 = 0
r4 = 0.8
k = 4 2r4 = 1.6 ⇒ d4 = 1
r5 = 0.6
k = 5 2r5 = 1.2 ⇒ d5 = 1
r6 = 0.2

Como r6 = r2 , teremos que os resultados para k de 2 a 5 se repetirão e então: r10 = r6 = r2 = 0.2


e assim indenidamente.
Concluímos que
(0.1)10 = (0.00011001100110011 . . .)2
e, portanto, o número (0.1)10 não tem representação binária nita.

O Exemplo 1.4 mostra que um número real entre 0 e 1 pode ter representação nita no
sistema decimal, mas representação innita no sistema binário. O fato de um número não
ter representação nita no sistema binário pode acarretar a ocorrência de erros aparentemente
inexplicáveis em cálculos efetuados em sistemas computacionais binários.

Exemplo 1.5 O número (0.11)10 tem representação innita


0.000111000010100011110101110000101000111101 . . .)2

Um computador que opera no sistema binário irá armazenar uma aproximação para (0.11)10 ,
uma vez que possui uma quantidade xa de posições para guardar os dígitos da mantissa de
um número, e esta aproximação será usada para realizar os cálculos. Não se pode esperar um
resultado exato.

Considere agora um número entre 0 e 1 representado no sistema binário:

(r)2 = (0.d1 d2 · · · dj · · · )2

Como obter sua representação no sistema decimal?


A conversão é semelhante ao que descrevemos anteriormente e o algoritmo a seguir de-
screve o processo:
Passo 0: r1 = r e k = 1
Passo 1: Calcule wk = (1010)2 × rk .
Seja zk a parte inteira de wk .
bk é a conversão de zk para a base 10.

3
cálculo numérico Prof. Valter Moitinho

Passo 2: Faça rk+1 = wk − zk


Se rk+1 = 0, pare. Caso contrário, vá para o próximo passo.
Passo 3: k = k + 1. Volte ao passo 1.
É importante observar que as operações devem ser efetuadas no sistema binário uma vez
que (10)10 = (1010)2 .
A adição de números binários é muito semelhante a de números decimais, exceto que o
máximo que se pode atingir em cada "coluna"é 2. Neste caso, deve-se "subir"1 para o vizinho e
continuar a adição. Logo 0 + 0 = 0, 0 + 1 = 1 + 0 = 1 e 1 + 1 = 0 e "sobe um". A multiplicação
binária é mais simples que a decimal, visto que o conjunto de números a serem multiplicados
são menores. Na multiplicação binária só existe duas possibilidades, multiplicar por 0 ou por
1, quando o numero se repete. Ao nal do processo tudo se resume a uma soma de números
binários.
Exemplo 1.6 Para ilustrar o algoritmo, considere o número
(0.000111)2 = (0.b1 b2 . . . bj )10

Aplicando o algoritmo, obtemos


r1 = (0.000111)2
w1 = (1010)2 × r1 = 1.00011 ⇒ b1 =1 e r2 = 0.00011
w2 = (1010)2 × r2 = 0.1111 ⇒ b2 =0 e r3 = 0.1111
w3 = (1010)2 × r3 = 1001.011 ⇒ b3 =9 e r4 = 0.011
w4 = (1010)2 × r4 = 11.11 ⇒ b4 =3 e r5 = 0.11
w5 = (1010)2 × r5 = 111.1 ⇒ b5 =7 e r6 = 0.1
w6 = (1010)2 × r6 = 101 ⇒ b6 =5 e r7 =0

Por conseguinte,
(0.000111)2 = (0.109375)10 .

Podemos agora entender melhor por que o resultado da operação


30000
X
S= 0.11
i=1

não é obtido exatamente num computador. Já vimos que (0.11)10 não tem representação nita
no sistema binário. Supondo um computador que trabalhe com apenas 6 dígitos na mantissa,
o número (0.11)10 seria armazenado como (0.000111)2 e este número representa exatamente
(0.109375)10 . Portanto, todas as operações que envolvem o número (0.11)10 seriam realizadas
com esta aproximação.

Você também pode gostar