Representação de Números

Teoria Completa

Introdução

Fala moçada, beleza? Vamos dar início ao estudo de uma disciplina muuuuito bacana que é o Cálculo Numérico, o nosso objetivo aqui é estudar o uso de alguns métodos numéricos para resolução dos mais diversos problemas!!! Então fique tranquilo que seus problemas acabaram!

Nós devemos ter em mente que o computador, a máquina, vai fazer tudo para a gente! Ou seja, os métodos que veremos muitas vezes vão parecer cansativos e demorados se nos imaginarmos resolvendo eles, mas normalmente são moleza para uma máquina.

E por mais que uma máquina faça todas as contas para nós, nós nunca conseguimos nos livrar de um detalhe bem incômodo: os erros. Vamos falar muito deles nesse curso pois seu entendimento é super necessário para conseguirmos aplicar os métodos numéricos adequadamente.

Algarismos significativos

Antes de começar a estudar como os números são apresentados para as máquinas, vamos relembrar um assuntinho que nos acompanha desde o início dessa jornada nas Engenharias e Ciências Exatas. Consegue dar um palpite? Se você chutou Algarismos significativos, você está certíssimo.

Veja bem, os algarismos significativos de um número são aqueles que podem ser usados com confiança e geralmente corresponde ao número de algarismos corretos mais um estimado, também chamado de duvidoso, e esse algarismo duvidoso carrega com ele uma incerteza e é nela que mora o erro.

Observe a marcação em nossa régua, quantos centímetros ela está medindo?

Bom, podemos afirmar com certeza que ela está medindo mais que 2,2 e menos que 2,3 cm. O número exato que procuramos existe e mora no intervalo entre esses números, mas não podemos identificá-lo com certeza absoluta, não é?

Podemos colocar esse número mais perto do 2,2   c m ou mais perto do 2,3   c m . Mas qual vai estar certo? Não podemos afirmar nada...

Então, temos uma incerteza aí! E isso está dependendo do observador ou do equipamento que você está usando para tirar essa medida.

No exemplo acima, cada estimativa tem 3 algarismos significativos, eles podem ser algarismos corretos ou duvidosos. Temos certeza, que o número que procuramos está entre 2,2   c m e 2,3   c m ou seja o número é 2,2 tem 2 algarismos corretos e estamos em dúvida quanto ao terceiro. Podemos considerar este último mais perto do 2,3   c m ou mais perto do 2,2   c m .

Nesse caso acima, estamos com 3 algarismos significativos e nossa incerteza é da ordem de 0,1   c m . Isso porque podemos considerar mais perto do 2,3   c m ou mais perto do 2,2   c m .

Vamos ver como funciona, quantos algarismos significativos tem o número 31.400? Ele pode ter 3, 4 ou 5 algarismos significativos, dependendo de os zeros serem conhecidos com confiança.

Perceba bem que todas essas representações podem ser apresentadas na forma de notação científica e um computador representa um número real no sistema próprio denominado aritmética de ponto flutuante resolvendo toda a incerteza!

Representação de Números

Tudo que usarmos vai depender de você, da sua necessidade. Vamos ver como isso interfere nos resultados?

Número máximo de dígitos ( k )

Imagine que você quer calcular a área de um disco de raio igual a 10 c m .

A = π r ²

A = π ( 10 ) ²

A = 100 π

A = 100 * 3,1415 . . .

Você pode dar várias respostas e ainda assim todas estão erradas! Algumas respostas possíveis seriam:

A = 314   c m 2

A = 314,16   c m 2

A = 314,159265   c m 2

A = 314,1592653589793238462643383279502884197169399375105820974 c m 2

Enfim, você pegou o espírito da coisa né? Como o π e um número com infinita casas decimais nunca chegaremos a resposta exata. O resultado que obtemos vai depender exclusivamente da aproximação de π que usarmos. E essa aproximação deve ser tão exata quanto precisarmos. E essa ideia será muito importante!

O número de casas decimais a ser usado vai depender da precisão desejada e de onde você vai aplicar esses dados!

Base escolhida

Como nós representamos números? É sobre isso que vamos falar nessa parte.

Cara, a base nada mais é do que a quantidade de algarismos que podemos usar para representar os números. Estamos acostumados com a base decimal que possui 10 algarismos (0, 1, 2... 9), essa é a base com a qual estamos acostumados a lidar no nosso dia a dia e aprendemos desde pequenos. Mas um computador, por outro lado, normalmente usa um sistema de representação binário (0 ou 1), o que significa que o computador irá escrever os números apenas com os algarismos 0 e 1, ele também usa o ponto para representar a nossa vírgula no sistema decimal.

E você pode usar qualquer base que queira para representar os números! A decimal é a mais empregada atualmente, mas existe a binária, a base hexadecimal (base 16), a octal (base 8), entre outras.

E os erros só aumentam quando manipulamos os números em diversas bases. Por exemplo, um número pode ter representação finita em uma base e não-finita em outra (não se preocupe, isso será visto mais pra frente)! Na nossa interação com o computador, nós passamos as informações para ele pelo sistema decimal. Esses dados são convertidos para o binário, no qual todos os cálculos são feitos e depois convertidos de volta para decimal para que possamos ler. Todas essas conversões geram ainda mais erros!

Conversão de Números nos Sistemas Decimal e Binário

Vamos começar engatinhando.

No sistema decimal, para representar um número podemos escrever ele na forma de somas potências de base dez. Parece complicado, mas olha só:

Vamos analisar o número 3682 que é do sistema decimal:

3682 = 3000 + 600 + 80 + 2

3682 = 3 × 1000 + 6 × 100 + 8 × 10 + 2 × 1

3682 = 3 × 10 ³ + 6 × 10 ² + 8 × 10 1 + 2 × 10 0

Prontinho, escrevemos um número como uma soma de potências de base dez.

Um número escrito na forma binária só usa algarismos do tipo 0 e 1. Mas, da mesma forma que era na base decimal, os algarismos vão indicar uma soma de potências de base dois Por exemplo, vamos agora analisar um número 1011 escrito na base 2:

1011 = 1 × 2 ³ + 0 × 2 ² + 1 × 2 ¹ + 1 × 2 0

Entendeu como funciona? Todos os números podem ser escritos como uma soma de potências de uma base. Generalizando, um número com os algarismos c i c i - 1 … c 2 c 1 c 0 na base β seria:

c i c i - 1 … c 2 c 1 c 0 β = c i β i + c i - 1 β i - 1 + … + c 2 β 2 + c 1 β 1 + c 0 β 0

Mas por que eu to falando isso? Porque assim é fácil passarmos números do sistema binário pro decimal! Por exemplo o 100101 2 em decimal fica:

100101 2 = 1 × 2 5 + 0 × 2 4 + 0 × 2 3 + 1 × 2 2 + 0 × 2 1 + 1 × 2 0

Fazendo essas continhas temos:

100101 2 = 1 × 2 5 + 0 × 2 4 + 0 × 2 3 + 1 × 2 2 + 0 × 2 1 + 1 × 2 0 = 32 + 4 + 1 = 37

Então o número 100101 2 da base 2 equivale ao 37 na base dez.

E pra voltar? Ir do decimal para o binário? Aí o que nós vamos fazer é dividir o número por 2 várias vezes até aparecer o 0 no quociente e ir anotando os restos! Assim oh:

37 2 = 18   e   r e s t o   1

18 2 = 9   e   r e s t o   0

9 2 = 4   e   r e s t o   1

4 2 = 2   e   r e s t o   0

2 2 = 1   e   r e s t o   0

1 2 = 0   e   r e s t o   1

Agora escrevemos os restos de trás pra frente:

37 10 = 100101 2

Percebeu que tá batendo certinho com o que tínhamos? Até aí tudo nas mil maravilhas né?

Mas, e para convertermos os números que vem depois da vírgula? Como faz??

Bom, vamos começar indo do binário para o decimal que é mais fácil, os números depois do ponto (que correspondem a vírgula no sistema decimal) serão elevados a potências de dez negativas. O expoente sempre irá diminuir:

101.1101 2 = 1 × 2 2 + 0 × 2 1 + 1 × 2 0 + 1 × 2 - 1 + 1 × 2 - 2 + 0 × 2 - 3 + 1 × 2 - 4 =

= 4 + 0 + 1 + 0.5 + 0.25 + 0 + 0.0625 = 5.8125 10

Ou seja, quando temos casas decimais ficamos com:

c i … c 0 . c - 1 … c - j β = c i β i + … + c 0 β 0 + c - 1 β - 1 + … + c - j β - j

Então o processo binário decimal não mudou muito né? É só continuarmos diminuindo as potências de 2 .

E para irmos do decimal para o binário? Vamos usar o 5.8125 10 . Primeiro fazemos a parte inteira:

5 2 = 2   e   r e s t o   1

2 2 = 1   e   r e s t o   0

1 2 = 0   e   r e s t o   1

5 10 = 101 2

Beleza, agora para a parte depois da vírgula nós vamos multiplicar por 2 ao invés de dividir! Depois de multiplicar verificamos se o número é maior que 1 . Se for, coloca-se 1 na parte fracionária e o “resto” passa adiante. Caso contrário, botamos um 0 . E vamos fazendo isso até chegarmos no 1 . Vai ficar mais claro com o exemplo:

0.8125 × 2 = 1.625 → D í g i t o   1

0.625 × 2 = 1.25 → D í g i t o   1

0.25 × 2 = 0.5 → D í g i t o   0

0.5 × 2 = 1 → D í g i t o   1

Pronto, ah e aqui a gente lê na ordem certa haha.

0.8125 10 = 0.1101 2

Somando:

5 10 + 0.8125 10 = 101.1101 2

Exatamente o que a gente esperava!

Agora lembra aquela história que eu falei de números que são finitos em uma base e não finitos em outra? Vamos passar o número 5.8 para binário. O 5 já sabemos que fica 101 , mas e o 0.8 ?

0.8 × 2 = 1.6 → D í g i t o   1

0.6 × 2 = 1.2 → D í g i t o   1

0.2 × 2 = 0.4 → D í g i t o   0

0.4 × 2 = 0.8 → D í g i t o   0

0.8 × 2 = 1.6 → D í g i t o   1

Opa, percebeu que entramos em um loop? Voltamos para o 0.8 ! Então nosso número em binário será uma dízima:

5.8 10 = 101.110011001100 … 2 = 101 . 1100 _ 2

E é daí que alguns problemas aparecem. . .

Para compreendermos como irá funcionar nesses casos, precisaremos entender um pouco melhor sobre a linguagem que os computadores usam. Isso veremos no próximo tópico, beleza?! Mas antes vamos praticar um pouco de conversão?!

Expandir

Exercício Resolvido #1

Adaptado do Exemplo 1.4 de Darezzo, S.A.|. A. Cálculo Numérico: aprendizagem com Apoio de Software.

Transforme os seguintes números da base decimal para a base binária:

(a) 25 (b) 11

MOSTRAR SOLUÇÃO COMPLETA

Passo 1

  1. 25
  2. Fala meu amigo, vamos relembrar um pouquinho como trocamos a base de um algarismo:

    Vamos do decimal para o binário? Aí o que nós vamos fazer é dividir o número por 2 várias vezes até aparecer o 0 no quociente e ir anotando os restos! Assim oh:

    25 2 = 12   e   r e s t o   1

    12 2 = 6   e   r e s t o   0

    6 2 = 3   e   r e s t o   0

    3 2 = 1   e   r e s t o   1

    1 2 = 0   e   r e s t o   1

    Organizando direitinho os restos fica:

    (1)

    (0)

    (0)

    (1)

    (1)

    Agora lemos os restos de trás pra frente:

    25 10 = 11001 2

    Molezinha! Vamos pro próximo?

    Passo 2

  3. 11

Meu bem, o esqueminha pra resolver esse exercício é igualzinho ao anteror. Vamos ver como fica?

11 2 = 5   e   r e s t o   1

5 2 = 2   e   r e s t o   1

2 2 = 1   e   r e s t o   0

1 2 = 0   e   r e s t o   1

Organizando direitinho os restos fica:

(1)

(1)

(0)

(1)

Agora lemos os restos de trás pra frente:

11 10 = 1011 2

Feshooooow! Agora é só partir pro abraço!

Resposta

  1. 25 10 = 11001 2
  2. 11 10 = 1011 2

Exercício Resolvido #2

Márcia A. Gomes Ruggiero e Vera Lúcia da Rocha Lopes, Cálculo Numérico – Aspectos Teóricos e Computacionais, 2ª ed. São Paulo: MAKRON Books, 1996, pag 22, exercício 1.

Converta os seguintes números decimais para sua forma binária:

x = 37                                                                 y = 2345                                                                 z = 0.1217

MOSTRAR SOLUÇÃO COMPLETA

Passo 1

Tá! Vamos lá!

x = 37 10

37 2 = 18   e   r e s t o   1

18 2 = 9   e   r e s t o   0

9 2 = 4   e   r e s t o   1

4 2 = 2   e   r e s t o   0

2 2 = 1   e   r e s t o   0

1 2 = 0   e   r e s t o   1

x = 100101 2

Passo 2

y = 2345 10

2345 2 = 1172   e   r e s t o   1

1172 2 = 586   e   r e s t o   0

586 2 = 293   e   r e s t o   0

293 2 = 146   e   r e s t o   1

146 2 = 73   e   r e s t o   0

73 2 = 36   e   r e s t o   1

36 2 = 18   e   r e s t o   0

18 2 = 9   e   r e s t o   0

9 2 = 4   e   r e s t o   1

4 2 = 2   e   r e s t o   0

2 2 = 1   e   r e s t o   0

1 2 = 0   e   r e s t o   1

y = 100100101001 2

Passo 3

Como só tem parte decimal começamos por ela direto. Lembrando que agora temos que multiplicar e não dividir!

0.1217 × 2 = 0.2434 → D í g i t o   0

0.2434 × 2 = 0.4868 → D í g i t o   0

0.4868 × 2 = 0.9736 → D í g i t o   0

0.9736 × 2 = 1.9472 → D í g i t o   1

0.9472 × 2 = 1.8944 → D í g i t o   1

0.8944 × 2 = 1.7888 → D í g i t o   1

0.7888 × 2 = 1.5776 → D í g i t o   1

0.5776 × 2 = 1.1552 → D í g i t o   1

0.1552 × 2 = 0.3104 → D í g i t o   0

0.3104 × 2 = 0.6208 → D í g i t o   0

0.6208 × 2 = 1.2416 → D í g i t o   1

Já deu pra perceber que isso não vai parar tão cedo né? Isso se parar! Então podemos dar como resposta:

z = 0.00011111001 … 2

Resposta

x = 100101 2

y = 100100101001 2

z = 0.00011111001 … 2

Exercício Resolvido #3

Márcia A. Gomes Ruggiero e Vera Lúcia da Rocha Lopes, Cálculo Numérico – Aspectos Teóricos e Computacionais, 2ª ed. São Paulo: MAKRON Books, 1996, pag 22, exercício 2.

Converta os seguintes números binários para sua forma decimal:

x = 101101 2                                                                                                                                 y = 110101011 2

        z = 0.1101 2                                                                                                                                   w = 0.111111101 2

MOSTRAR SOLUÇÃO COMPLETA

Passo 1

x = 101101 2 = 1 × 2 5 + 0 × 2 4 + 1 × 2 3 + 1 × 2 2 + 0 × 2 1 + 1 × 2 0 =

= 32 + 8 + 4 + 1 = 45 10

Passo 2

y = 110101011 2 =

= 1 × 2 8 + 1 × 2 7 + 0 × 2 6 + 1 × 2 5 + 0 × 2 4 + 1 × 2 3 + 0 × 2 2 + 1 × 2 1 + 1 × 2 0 =

= 256 + 128 + 32 + 8 + 2 + 1 = 427 10

Passo 3

z = 0.1101 2 = 0 × 2 0 + 1 × 2 - 1 + 1 × 2 - 2 + 0 × 2 - 3 + 1 × 2 - 4 =

= 1 2 + 1 4 + 1 16 = 0.8125 10

Passo 4

w = 0.111111101 2 =

= 0 × 2 0 + 1 × 2 - 1 + 1 × 2 - 2 + 1 × 2 - 3 + 1 × 2 - 4 + 1 × 2 - 5 + 1 × 2 - 6 + 1 × 2 - 7 + 0 × 2 - 8 + 1 × 2 - 9 =

= 1 2 + 1 4 + 1 8 + 1 16 + 1 32 + 1 64 + 1 128 + 1 512 = 0 . 994140625 10

Resposta

x = 45 10

y = 427 10

z = 0.8125 10

w = 0 . 994140625 10

Exercício Resolvido #4

Lista 1 – Professora Luziane – UFRJ – Questão 4 Adaptada

Considere um computador que opera em base 2 , com representação em precisão simples. Em cada um dos itens abaixo, mostre qual é o número real que está representado em forma de ponto flutuante normalizado.

a   0   01100010   1010100100 … 0

b   1   11111111   1010100100 … 0

c   0   11111111   0000000000 … 0

d   1   00000000   0110010000 … 0

e   1   00000000   0000000000 … 0

f   0   10010100   0110110000 … 0

g   1   01111111   0010100100 … 0

MOSTRAR SOLUÇÃO COMPLETA

Passo 1

a   O segundo bloco de números representa o expoente. Nele, temos n= 8 espaços, que são 8 bits. Dessa forma, o expoente máximo é dado por:

e m a x = 2 n . e . - 1 - 1

e m a x = 127

Assim, a representação normalizada será:

- 1 s 2 c - 127 1 + f

s = 0

c = 1 × 2 6 + 1 × 2 5 + 1 × 2 1 = 64 + 32 + 2 = 98

f = 1 × 2 - 1 + 1 × 2 - 3 + 1 × 2 - 5 + 1 × 2 - 8 = 0.66015625

Então o número sendo representado é:

- 1 0 ∙ 2 98 - 127 ∙ 1 + 0.66015625 = 2 - 29 ∙ 1 . 66015625 ≈ 3.092282 × 10 - 9

Passo 2

b   Repare que aqui temos toda a característica cheia de 1 , mas a mantissa diferente de zero. Isso é um caso onde a máquina acusaria N a N (not a number).

Passo 3

c Aqui temos expoente todo no 1 e a mantissa zerada. Como s = 0 , essa seria a representação de + ∞ .

Passo 4

d Como temos expoente igual a 0 e uma mantissa diferente de 0 , isso indica um número não normalizado. Consideramos então a mantissa entre 0 e 1 e expoente mínimo ficando com:

- 1 s 2 - 126 f

s = 1

f = 2 - 2 + 2 - 3 + 2 - 6 = 0.390625

Então o número sendo representado é:

- 1 1 ∙ 2 - 126 0.390625 = - 4.591775 ∙ 10 - 39

Passo 5

e Temos o expoente e a mantissa zerada. Como s = 1 , essa seria a representação de - 0 .

Passo 6

f - 1 s 2 c - 127 1 + f

s = 0

c = 2 7 + 2 4 + 2 2 = 148

f = 2 - 2 + 2 - 3 + 2 - 5 + 2 - 6 = 0.421875

Então o número sendo representado é:

- 1 0 ∙ 2 148 - 127 ∙ 1 + 0.421875 = 2 21 ∙ 1 . 421875 = 2.981888 × 10 6

Passo 7

g - 1 s 2 c - 127 1 + f

s = 1

c = 2 6 + 2 5 + 2 4 + 2 3 + 2 2 + 2 1 + 2 0 = 127

f = 2 - 3 + 2 - 5 + 2 - 8 = 0.16015625

- 1 1 ∙ 2 127 - 127 ∙ 1 + 0.16015625 = - 1.16015625

Resposta

a 3.092282 × 10 - 9

b N a N

c + ∞

d - 4.591775 ∙ 10 - 39

e - 0

f 2.981888 × 10 6

g - 1.16015625

Exercício Resolvido #5

Elaboração Própria

Considere um computador de 16   b i t s com expoente máximo e = 31 e a representação em aritmética flutuante na base 2 .

a Determine o menor número positivo normalizado e não normalizado representável nesta máquina, na base 10 .

b Determine o maior número positivo representável nesta máquina, na base 10