Representação de Números e Aritmética de Ponto Flutuante

Resumo Completo

Introdução

Fala galera, cá estamos no primeiro tópico de Cálculo Numérico. Bom, o nosso objetivo nessa disciplina é estudar métodos numéricos para a resolução dos mais diversos problemas que você possa imaginar.

O ponto principal que você deve manter em mente é que queremos que o computador, a máquina, faça 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 pra 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.

Esses erros aparecem de várias formas. Nos dados iniciais que passamos para a máquina, que podem ser medições experimentais que fizemos ou dados de pesquisas por exemplo. Mas não somos só nós que erramos não! Parte do erro final se deve à forma que o computador representa, armazena e opera aritmeticamente os dados que passamos para ele. E é nisso que vamos nos focar nesse primeiro assunto do curso.

Representação de Números

Tudo, desde os símbolos usados até a base escolhida e o número máximo de dígitos para a representação vão depender de você, da sua necessidade. Vamos ver como isso interfere nos nossos resultados?

Número máximo de dígitos

Imagine que você quer calcular a área de um disco de raio igual a 10 c m . Você poderia dar várias respostas e ainda assim todas estariam 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é? 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!

De acordo com o engenheiro Marc Rayman da NASA, por exemplo, com 15 casas decimais de π , seria possível calcular a circunferência da Terra com um erro 10.000 vezes menor que um fio de cabelo. Indo um pouco (muito na verdade haha) mais longe, para calcular o comprimento de uma circunferência com 46 bilhões de anos-luz de raio em volta do universo observável seria suficiente uma aproximação de π com apenas 40 casas decimais para garantir precisão de 1 átomo de hidrogênio.

Ou seja, fica claro que o número de casas decimais a ser usado vai depender da precisão desejada e da onde você vai aplicar esses dados! Não é todo dia que seres humanos comuns como nós fazem cálculos para viagens interplanetárias né?

E isso vale para qualquer cálculo que envolva números que não podem ser representados por uma quantidade finita de dígitos. Como por exemplo a diagonal de um quadrado, o comprimento de cada pedaço de uma barra de 1 metro dividida em 3 , e por aí vai.

Base escolhida

Como nós representamos números? Nós pensamos em decimal certo? E é a base com a qual estamos acostumados a lidar no nosso dia a dia. Um computador, por outro lado, normalmente usa um sistema de representação binário.

E você pode usar qual base quiser! 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 juntamos as duas coisas, o número máximo de dígitos e a base. Por exemplo, um número pode ter representação finita em uma base e não-finita em outra! Na nossa iteraçã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. Toda essa conversão gera ainda mais erros!

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

Vamos começar engatinhando. Como convertemos números inteiros? Pensa no número 100101 2 . Esse número pode ser representado assim:

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

Analogamente, o número 257 10 pode ser representado como:

257 10 = 2 × 10 2 + 5 × 10 1 + 7 × 10 0

Deu pra pegar a ideia? Em geral temos o seguinte:

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 = 32 + 4 + 1 = 37

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 lemos 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 pra 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:

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 pra 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, precebeu 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. . .

Aritmética de Ponto Flutuante

Já vimos como é feita a conversão entre as bases, falta agora vermos como os computadores guardam essa informação! Os números binários são representados seguindo um padrão seguido por praticamente todos os computadores. Uma representação binária em 64   b i t s (precisão dupla) é usada para números reais.

O primeiro b i t é o indicador de sinal ( 0 para positivo e 1 para negativo), denotado por s . Ele é então seguido por um expoente de 11   b i t s , chamada característica e uma parte fracionária binária de 52   b i t s chamada mantissa. A característica com 11   b i t s nos dá valores de - 1022 até 1023 , onde o expoente máximo é dado pela relação e m a x = 2 n . e . - 1 - 1 , sendo n . e . o número de b i t s do expoente.

Usando esse sistema temos um número de ponto flutuante normalizado da forma:

- 1 s 2 c - 1023 1 + f

Por exemplo, o número:

0   10000000101   1011010100100 0

O dígito mais a esquerda é um 0 , portanto ele é positivo. Na característica temos:

c = 2 10 + 2 2 + 2 0 = 1024 + 4 + 1 = 1029

E na mantissa temos:

f = 1 × 2 - 1 + 1 × 2 - 3 + 1 × 2 - 4 + 1 × 2 - 6 + 1 × 2 - 8 + 1 × 2 - 11 = 0.70751953125

Ficamos então com:

- 1 0 2 1029 - 1023 1 + 0.70751953125 = 2 6 1.70751953125 = 109.28125

O menor número positivo normalizado teria s = 0 , c = 1 e f = 0 , equivalente a:

2 - 1022 1 + 0 0.22251 × 10 - 307

E o maior tem s = 0 , c = 2046 e f = 1 - 2 - 52 , e equivale a:

2 1023 2 - 2 - 52 0.17977 × 10 309

Obs.: Outra representação comum é a em 32   b i t s (precisão simples) onde temos 1 bit para o sinal, 8 para a característica e 23 para a mantissa. Nesse caso, o expoente varia entre - 126 até 127 . Em geral, - 1 s 2 c - 127 1 + f

Obs.: Alguns valores especiais são:

z e r o s = 0   o u   1 ; e x p = 0 ; f = 0

+ s = 0 ; e x p = 111 111 ; f = 0

- s = 1 ; e x p = 111 111 ; f = 0

N a N   n o t   a   n u m b e r s = 0   o u   1 ; e x p = 111 111 ; f 0

Quando temos o expoente igual a 0 e um valor diferente de 0 na mantissa é uma indicação de número não normalizado. Nesse caso consideramos a mantissa entre 0 e 1 ao invés de entre 1 e 2 e usamos o expoente mínimo.

Em geral, podemos representar qualquer número real no sistema chamado de aritmética de ponto flutuante. Neste sistema, um número é respresentado na sua forma normalizada:

± 0 . d 1 d 2 d k × β n

onde:

β é a base em que o computador opera

k é o número de dígitos na mantissa

1 d 1 β - 1

0 d i β - 1   ,   i 2 , k

n é o expoente no intervalo 1 , u

Desse modo, uma máquina que use aritmética de ponto flutuante pode ser caracterizada por 4 números:

F β , k , e m i n , e m a x

Considere, por exemplo, uma máquina que opera no sistema:

β = 10 ; k = 5 ; n - 5,5 ,

Ou seja, F 10,5 , - 5,5 . Os números são representados nesse sistema da seguinte forma:

± 0 . d 1 d 2 d 3 d 4 d 5 × 10 n ; 1 d 1 9 ;   0 d i 9   ,   i 2,5

O menor número, em valor absoluto, representado por essa máquina seria:

0.10000 × 10 - 5 = 10 - 6

Enquanto o maior número seria:

0.99999 × 10 5 = 99999

Como vimos, em nenhuma máquina é possível representarmos todos os números reais devido ao limite físico. Sendo assim apenas um conjunto deles pode ser representado completamente. Por essa razão, a representação de alguns números será realizada por meio de truncamento ou arredondamento.

Por exemplo, o número π é representado na sua forma decimal normalizada da seguinte forma:

π = 0.314159265 × 10 1

Se fôssemos representa-lo na máquina acima usando truncamento teríamos:

0.31415 × 10 1

Enquanto usando arredondamento teríamos:

0.31416 × 10 1

Isso porque o sexto dígito da representação normalizada de π é um 9 5 , logo ao arredondarmos somamos uma unidade na quinta casa decimal.

Nesse caso temos que π está entre o mínimo e máximo que essa máquina pode representar, mas possui muitas casas decimais, então acabamos com uma aproximação.

Também pode acontecer de termos um número menor que o mínimo da máquina, como por exemplo:

0.97976 × 10 - 7

Ele não pode ser representado pois o expoente n é menor que - 5 . Nessas situações a máquina acusa a ocorrência de underflow.

Analogamente podemos ter um número de valor absoluto maior do que a máquina consegue representar:

0.60963 × 10 8

Nesse caso a máquina acusa a ocorrência de overflow.

Beleza, vamos praticar um pouco isso aí que vimos antes de passar adiante!

Expandir

Exercício Resolvido #1

Enunciado

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 PASSO A PASSO

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 #2

Enunciado

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 PASSO A PASSO

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 #3

Enunciado

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 PASSO A PASSO

Passo 1

a   - 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 #4

Enunciado

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 .

MOSTRAR SOLUÇÃO PASSO A PASSO

Passo 1

Antes de qualquer coisa temos que descobrir quantos b i t s essa máquina reserva para cada coisa. Temos 1 b i t pro sinal. Para que o expoente máximo seja 31 , usando nossa relação:

31 = 2 n . e . - 1 - 1

log 2 32 = n . e . - 1

5 = n . e . - 1

n . e . = 6

Logo, temos 6 b i t s   para o expoente.

Ficamos então com:

16 - 6 - 1 = 9

Logo, 9   b i t s para a mantissa.

Passo 2

a O menor número normalizado representável seria:

0   000001   000000000

Equivalente em decimal a:

- 1 0 2 - 30 1 9.313226 × 10 - 10

Já o menor número não normalizado seria:

0   000000   000000001

Equivalente a:

- 1 0 2 - 30 0.001953125 = 1.818989 × 10 - 12

Passo 3

b O maior número positivo representável é:

0   111110   111111111

O que equivale a:

- 1 0 2 31 1 . 998046875 = 4.290772992 × 10 9

Resposta

a Menor número positivo normalizado: 9.313226 × 10 - 10

Menor número positivo não normalizado: 1.818989 × 10 - 12

b Maior número positivo: 4.290772992 × 10 9

Exercício Resolvido #5

Enunciado

Lista 1 – Professora Luziane – UFRJ – Questão 1 e 2 Adaptadas

Expresse os números a seguir usando representação em ponto flutuante normalizada na base indicada:

a 5.987 10

b 630 10

c 0.000000512 10

d 1111 2

e 10.11 2

f 0.0001000 2

Em seguida, refaça o exercício usando apenas 2 dígitos na mantissa e arredondamento.

MOSTRAR SOLUÇÃO PASSO A PASSO

Passo 1

a 5.987 10 = 0.5987 × 10 1

b 630 10 = 0.63 × 10 3

c   0.000000512 10 = 0.512 × 10 - 6

d 1111 2 = 0.1111 × 2 4

e 10.11 2 = 0.1011 × 2 2

f   0.0001000 2 = 0.1 × 2 - 3

Passo 2

-

Refazendo com 2 dígitos na mantissa e arredondamento.

a 5.987 10 = 0.60 × 10 1

b 630 10 = 0.63 × 10 3

c   0.000000512 10 = 0.51 × 10 - 6

d 1111 2 = 0.10 × 2 5

e 10.11 2 = 0.11 × 2 2

f   0.0001000 2 = 0.10 × 2 - 3

Resposta

Exercício Resolvido #6

Enunciado

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

Seja um computador binário cuja palavra tem 3 dígitos para a mantissa, característica variando de m = - 2 a M = 2 e que trabalha com truncamento.

a Calcule o menor número negativo nele representável.

b Calcule o maior número positivo nele representável.

c O número 11 8 está entre os números calculados em a e b ?

MOSTRAR SOLUÇÃO PASSO A PASSO

Passo 1

O menor número negativo é simplesmente o maior número positivo com o b i t de sinal trocado né haha. Então podemos responder a a e a b de uma vez! Como o maior expoente é 2 , o maior número positivo em binário seria:

0.111 × 2 2 = 11.1

O menor número negativo seria em binário:

- 0.111 × 2 2 = - 11.1

Passo 2

-

Agora ele quer saber se 11 8 = 1.375 está entre os valores que achamos. Como não podemos comparar um número no sistema decimal com um no binário, vamos converter 1.375 para binário:

1 10 = 1 2

0.375 × 2 = 0.75 D í g i t o   0

0.75 × 2 = 1.5 D í g i t o   1

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

0.375 10 = 0.011 2

Logo,

1.375 10 = 1.011 2

Ou seja, ele está entre os valores encontrados nas letras a e b .

Resposta

Exercício Resolvido #7

Enunciado

Lista 1 – Professor Raymundo – UFRJ – Questão 10a

Seja um computador binário, cujo sistema de ponto flutuante tenha 1   b i t para o sinal do número, 5   b i t s para o expoente e 6   b i t s para a mantissa num total de 12   b i t s . Qual o menor número positivo e o maior número positivo nele representável.

MOSTRAR SOLUÇÃO PASSO A PASSO

Passo 1

Como temos 5   b i t s para o expoente, o expoente máximo é dado por:

e m a x = 2 5 - 1 - 1 = 2 4 - 1 = 15

Portanto, o expoente mínimo será - 14 .

Também podemos pensar que a máquina vai do expoente 00 00 1 até o 11 11 0 , ou seja, do 1 ao 30 . Como queremos representar os números negativos também, subtraímos 15 , de modo que os expoentes agora variam de - 14 até 15 .

Passo 2

Sendo assim, o valor máximo que ela pode representar é:

2 15 2 - 2 - 6 = 65024

O valor mínimo normalizado será:

2 - 14 1 = 6 . 103515625 × 10 - 5

E o não normalizado:

2 - 14 2 - 6 = 2 - 20 = 9.5367431640625 × 10 - 7

Resposta

Maior número positivo: 65024

Menor número positivo normalizado: 6 . 103515625 × 10 - 5

Menor número positivo não normalizado: 9.5367431640625 × 10 - 7

Exercício Resolvido #8

Enunciado

Lista 1 – Professora Luziane – UFRJ – Questão 3

Suponha que estejamos usando uma máquina que funciona em base 2 e possui uma representação em 10   b i t s , sendo 1 para o sinal da mantissa, 3 para o expoente e 6 para a mantissa. A partir de que valor a máquina irá exibir na resposta o v e r f l o w ? E u n d e r f l o w ?

MOSTRAR SOLUÇÃO PASSO A PASSO

Passo 1

Para descobrirmos que números causam o v e r f l o w e u n d e r f l o w na máquina precisamos saber o número máximo que ela consegue representar, assim como o número mínimo.

Como temos 3   b i t s para o expoente, o expoente máximo é dado por:

e m a x = 2 3 - 1 - 1 = 2 2 - 1 = 3

Portanto, o expoente mínimo será - 2 .

Também podemos pensar que a máquina vai do expoente 001 até o 110 , ou seja, do 1 ao 6 . Como queremos representar os números negativos também, subtraímos 3 , de modo que os expoentes agora variam de - 2 até 3 .

Passo 2

-

Sendo assim, o valor máximo que ela pode representar é:

2 3 2 - 2 - 6 = 15.875

Qualquer valor maior que esse causará o v e r f l o w .

Já o valor mínimo será:

2 - 2 1 = 0.25

Qualquer valor menor que esse em módulo causará u n d e r f l o w .

Resposta

Exercício Resolvido #9

Enunciado

Lista 1 – Professor Daniel – UFRJ – Questão 3

Considere uma máquina com sistema de representação de números definido por: base 10 , 5 dígitos na mantissa e expoente no intervalo - 6 ; 6 . Como será representado o número 1892477 nesta máquina se for usado o arredondamento. E se for usado o truncamento?

MOSTRAR SOLUÇÃO PASSO A PASSO

Passo 1

Nosso instinto já manda a gente fazer o que? Passar pra binário né? Mas presta atenção no que o enunciado fala!! Ele diz que a máquina funciona na base 10 ! Então não tem que passar nada pra nada haha. É só passar pra notação normalizada de ponto flutuante:

1892477 = 1.892477 × 10 6

Usando o truncamento temos:

1.89247 × 10 6

E usando o arredondamento:

1.8924 8 × 10 6

Resposta

Truncamento: 1.89247 × 10 6

Arredondamento: 1.89248 × 10 6

Exercício Resolvido #10

Enunciado

Lista 1 – Professor Raymundo – UFRJ – Questões 3 até 7

Um computador armazena números reais utilizando 1   b i t para o sinal do número, 7   b i t s para o expoente e 8   b i t s para a mantissa. Admitindo que haja arredondamento, como ficariam armazenados os seguintes números decimais?

a 265

b 12.5

c - 445.25

d - 0.1

e - 12.8

f 2500.05

Em seguida, responda:

i Qual o valor verdadeiramente representado em cada caso acima?

i i Qual o maior e o menor número positivo nele representável?

i i i Qual o menor número maior que 100 nele representável?

i v Qual o maior número menor que 20 nele representável?

MOSTRAR SOLUÇÃO PASSO A PASSO

Passo 1

Os 7   b i t s do expoente variarão de 0000001 até 1111110 , isto é, de 1 até 126 . Como precisamos representar expoentes negativos, subtraímos 63 disso de modo que o expoente agora varie de - 62 até 63 .

a 265

Passando o número para binário.

265 2 = 132   e   r e s t o   1

132 2 = 66   e   r e s t o   0

66 2 = 33   e   r e s t o   0

33 2 = 16   e   r e s t o   1

16 2 = 8   e   r e s t o   0

8 2 = 4   e   r e s t o   0

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

265 10 = 100001001 2

Então, 265 10 = 100001001 2 = 1 . 00001001 × 2 8 . Repare que esse 1 na frente do binário é aquele 1 que sempre somamos e está implícito. Na hora de passar ele para a representação passamos só o que ficou depois da vírgula. Além disso, como temos 8   b i t s mantissa e 8 casas decimais, não precisaremos cortar nenhuma.

Quanto ao expoente 8 , precisamos somar aqueles 63 que calculamos para obtermos o expoente certo.

8 + 63 = 71 = 64 + 4 + 2 + 1 = 2 6 + 2 2 + 2 1 + 2 0

A representação no sistema será:

0   1000111   00001001

Passo 2

b 12.5

Passando o número para binário. Primeiro a parte inteira:

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

12 10 = 1100 2

Agora a parte fracionária:

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

Então, 12.5 10 = 1100.1 2 = 1 . 1001 × 2 3 . Temos 8   b i t s mantissa e 4 casas decimais, então não precisaremos cortar nenhuma.

Consertando o expoente:

3 + 63 = 66 = 64 + 2 = 2 6 + 2 1

A representação no sistema será:

0   1000010   10010000

Passo 3

c - 445.25

Passando o número para binário. Primeiro a parte inteira:

445 2 = 222   e   r e s t o   1

222 2 = 111   e   r e s t o   0

111 2 = 55   e   r e s t o   1

55 2 = 27   e   r e s t o   1

27 2 = 13   e   r e s t o   1

13 2 = 6   e   r e s t o   1

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

445 10 = 110111101 2

Agora a parte fracionária:

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

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

Então, - 445.25 10 = - 110111101.01 2 = - 1 . 1011110101 × 2 8 . Temos 8   b i t s mantissa e 10 casas decimais, então basta cortar as duas últimas. Como o que vai ser cortado é menos da metade da última casa decimal é só tirar mesmo. É importante lembrarmos também que agora o primeiro dígito será um 1 , já que o número é negativo.

Consertando o expoente:

8 + 63 = 71 = 64 + 4 + 2 + 1 = 2 6 + 2 2 + 2 1 + 2 0

A representação no sistema será:

1   1000111   10111101

Passo 4

d - 0.1

Passando o número para binário.

0.1 × 2 = 0.2 D í g i t o   0

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

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

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

Opa, estamos repetindo, então temos uma dízima!

Logo, - 0.1 10 = - 0.0 0011 ¯ 2 = - 1.10011010 × 2 - 4 . Temos 8   b i t s na mantissa e infinitos no nosso número, então temos que cortar. Mas agora o que vamos remover é maior que a metade da última casa decimal que vai ficar, então somamos 1 nela, que foi o que eu fiz ali em cima. E novamente temos um número negativo, então primeiro dígito 1 .

Consertando o expoente:

- 4 + 63 = 59 = 32 + 16 + 8 + 2 + 1 = 2 5 + 2 4 + 2 3 + 2 1 + 2 0

A representação no sistema será:

1   0111011   10011010

Passo 5

e - 12.8

Passando o número para binário. Primeiro a parte inteira:

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

12 10 = 1100 2

Agora a parte fracionária:

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, estamos repetindo, então temos uma dízima!

Logo, - 12.8 10 = - 1100 . 1100 ¯ 2 = - 1.10011010 × 2 3 . Novamente temos 8   b i t s na mantissa e infinitos no nosso número, então temos que cortar. E caímos na mesma situação da última letra, na qual o que vamos remover é maior que a metade da última casa decimal que vai ficar, então somamos 1 nela. Por fim, como o número é negativo, então o primeiro dígito é 1 .

Consertando o expoente:

3 + 63 = 66 = 64 + 2 = 2 6 + 2 1

A representação no sistema será:

1   1000010   10011010

Passo 6

f   2500.05

Passando o número para binário. Primeiro a parte inteira:

2500 2 = 1250   e   r e s t o   0

1250 2 = 625   e   r e s t o   0

625 2 = 312   e   r e s t o   1

312 2 = 156   e   r e s t o   0

156 2 = 78   e   r e s t o   0

78 2 = 39   e   r e s t o   0

39 2 = 19   e   r e s t o   1

19 2 = 9   e   r e s t o   1

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

2500 10 = 100111000100 2

Agora a parte fracionária:

0.05 × 2 = 0.1 D í g i t o   0

Opa, caímos naquele loop do 0.1 que já sabemos que vai dar uma dízima! É só pegarmos o valor do 0.1 da outra letra e botarmos um 0 na frente que teremos o resultado do 0.05 !

Logo, 2500.05 10 = 100111000100.00 0011 ¯ 2 = 1 . 00111001 × 2 11 . Temos 8   b i t s na mantissa e infinitos no nosso número, então arredondamos.

Consertando o expoente:

11 + 63 = 74 = 64 + 8 + 2 = 2 6 + 2 3 + 2 1

A representação no sistema será:

0   1001010   00111001

Passo 7

i Qual o valor verdadeiramente representado em cada caso acima?

Nas letras em que não arredondamos, o resultado está correto. Nas demais, temos que fazer a conversão:

a 265 (valor exato)

b 12.5 (valor exato)

c Nessa letra tivemos que cortar as casas decimais. Consequentemente o valor representado foi apenas a parte inteira - 445 .

d O valor representado foi - 0.000110011010 2 = - 2 - 4 + 2 - 5 + 2 - 8 + 2 - 9 + 2 - 11 = - 0.10009765625 .

e O valor representado foi - 1100,11010 2 = - 12,8125 .

f O valor representado foi 100111001000 2 = 2504

Passo 8

i i Qual o maior e o menor número positivo nele representável?

Maior número positivo:

0   1111110   11111111

- 1 0 2 63 2 - 2 - 8 = 1.84107152767 × 10 19

Menor número positivo na forma normalizada:

0   0000001   00000000

- 1 0 2 - 62 1 = 2.168404344971 × 10 - 19

Menor número positivo na forma não normalizada:

0   0000000   00000001

- 1 0 2 - 62 2 - 8 = 2 - 70 8.470329472543 × 10 - 22

Passo 9

i i i Qual o menor número maior que 100 nele representável?

Primeiro vamos representar 100 nele:

100 2 = 50   e   r e s t o   0

50 2 = 25   e   r e s t o   0

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

Então temos que 100 10 = 1100100 2 = 1.10010000 × 2 6 já com as 8 casas decimais da mantissa. O número imediatamente seguinte seria:

  1.10010001 × 2 6 = 1100100.01 2 = 100.25 10

Você também poderia reparar que o 100 ocupa 6   b i t s da mantissa sobrando apenas 2   b i t s para a parte decimal. O menor número fracionário que se pode fazer com 2   b i t s é 0.25 , então o número imediatamente após de 100 nesse sistema tem que ser 100.25

Passo 10

i v Qual o maior número menor que 20 nele representável?

Mesmo esquema da última, vamos representar o 20 :

20 2 = 10   e   r e s t o   0

10 2 = 5   e   r e s t o   0

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

Então 20 10 = 10100 2 = 1.01000000 × 2 4 . O número imediatamente anterior seria:

1.00111111 × 2 4 = 10011.1111 2 = 19,9375 10

Analogamente ao anterior, o número 20 ocupa 4   b i t s da mantissa, sobrando mais 4 para a parte fracionária. A menor fração que podemos fazer nesse caso é 2 - 4 = 0.0625 . Então o número imediatamente anterior a 20 nesse sistema é 20 - 0.0625 = 19.9375

Resposta

a 0   1000111   00001001

b 0   1000010   10010000

c 1   1000111   10111101

d 1   0111011   10011010

e 1   1000010   10011010

f 0   1001010   00111001

i

a 265

b 12.5

c - 445 .

d - 0.10009765625 .

e - 12,8125 .

f 2504

i i Maior número positivo:

1.84107152767 × 10 19

Menor número positivo na forma normalizada:

2.168404344971 × 10 - 19

Menor número positivo na forma não normalizada:

8.470329472543 × 10 - 22

i i i 100.25

i v 19.9375

Esse conteúdo é exclusivo para cadastrados.

Cadastre-se grátis no maior portal de exatas do Brasil!

Relaxa, não vamos publicar nada no seu nome.

  • Resumões direto ao ponto
    Resumões
    direto ao ponto
  • Exercícios resolvidos passo a passo
    Exercícios resolvidos
    passo a passo
  • Videoaulas incríveis
    Videoaulas
    incríveis
  • Aulões Salva-Vidas
    Aulões
    Salva-Vidas