Exercícios Resolvidos de Aritmética de Ponto Flutuante

Ver Teoria

Enunciado

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?

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 . 0 0011 ¯ × 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   100 0 1 10 0

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

Exercícios de Livros Relacionados

Escreva um programa em alguma linguagem para obter o resultado da seguinte operação: S = 10000 - ∑ k = 1 n x para: a) n=10000 e x= 0.1; b)n=80000 e x=0.125.
Considere uma máquina cujo sistema de representação de números é definido por: β = 10 ,t = 4 , l = - 5eu = 5 . Pede-se:qual o menor e o maior número em módulo representados nesta máquina? como será re
Seja um sistema em aritmética de ponto flutuante de quatro dígitos, base decimal e com acumulador de precisão dupla. Dados os números: x = 0.7237 × 1 0 4 , y = 0.2145 × 1 0 - 3 e z = 0.2585 × 1 0 1 Ef
Seja o sistema 𝐹 2,3 , − 1,2 . Exiba todos os números representáveis neste sistema e coloque-os sobre um eixo ordenado.
Considere o sistema 𝐹 2,8 , 4,4 e os números: 𝑥 1 = 0.10110011 × 2 2   𝑒   𝑥 2 = 0.10110010 × 2 2     . Qual dos dois representa melhor 2.8 10 ?