Aritmética de Ponto Flutuante
Teoria
Fala aí, beleza?! Vamos falar sobre a linguagem que os computadores usam?! Um computador ou calculadora representa um número real no sistema denominado aritmética de ponto flutuante! Os números binários são representados seguindo um padrão seguido por praticamente todos os computadores:
Uma representação binária em (precisão simples) é usada para números reais, onde temos bit para o sinal, para a característica e para a mantissa (parte fracionária do número). Nesse caso, o expoente varia entre até .
Em geral, um número normalizado em 32 bits é da forma:
Onde s será o sinal, c a característica e f a mantissa.
Se estivermos trabalhando com 64 bits o 127 é substituído por 1023. Beleza?!
Obs.: Alguns valores especiais são:
Quando temos o expoente igual a e um valor diferente de na mantissa é uma indicação de número não normalizado. Nesse caso consideramos a mantissa entre e ao invés de entre e e usamos o expoente mínimo. Na aritmética de ponto flutuante ficamos com essa carinha aqui, onde:
Os são os dígitos da parte fracionária:
é a base (em geral 2, 10 ou 16);
é o número de dígitos na mantissa;
é o expoente no intervalo
Show de bolas?!
Desse modo, uma máquina que use aritmética de ponto flutuante pode ser caracterizada por números:
Vamos ver um exemplo de como isso funciona?
Considere, por exemplo, uma máquina que opera no sistema:
Ou seja, . Os números são representados neste sistema da seguinte forma:
O menor número, em valor absoluto, representado por essa máquina seria:
Enquanto o maior número seria:
Show de bola?!
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:
Se fôssemos representa-lo na máquina acima usando truncamento teríamos:
Enquanto usando arredondamento teríamos:
Isso porque o sexto dígito da representação normalizada de é um , logo ao arredondarmos somamos uma unidade na quinta casa decimal. Beleza?!
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:
Ele não pode ser representado pois o expoente é menor que . 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:
Nesse caso a máquina acusa a ocorrência de overflow. Beleza, vamos praticar um pouco isso aí que vimos antes de passar adiante!
Exercícios Resolvidos
Exercício Resolvido #1
Elaboração Própria
Considere um computador de com expoente máximo e a representação em aritmética flutuante na base .
Determine o menor número positivo normalizado e não normalizado representável nesta máquina, na base .
Determine o maior número positivo representável nesta máquina, na base .
Passo 1
Antes de qualquer coisa temos que descobrir quantos essa máquina reserva para cada coisa. Temos pro sinal. Para que o expoente máximo seja , usando nossa relação:
Logo, temos para o expoente.
Ficamos então com:
Logo, para a mantissa.
Passo 2
O menor número normalizado representável seria:
Equivalente em decimal a:
Já o menor número não normalizado seria:
Equivalente a:
Passo 3
O maior número positivo representável é:
O que equivale a:
Resposta
Menor número positivo normalizado:
Menor número positivo não normalizado:
Maior número positivo:
Exercício Resolvido #2
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:
Em seguida, refaça o exercício usando apenas dígitos na mantissa e arredondamento.
Passo 1
Passo 2
Refazendo com dígitos na mantissa e arredondamento.
Resposta
Ei, a resposta está no passo a passo :)
Exercício Resolvido #3
Lista 1 – Professora Angela – UFRJ – Questão 4 Adaptada
Seja um computador binário cuja palavra tem dígitos para a mantissa, característica variando de a e que trabalha com truncamento.
Calcule o menor número negativo nele representável.
Calcule o maior número positivo nele representável.
O número está entre os números calculados em e ?
Passo 1
O menor número negativo é simplesmente o maior número positivo com o de sinal trocado né haha. Então podemos responder a e a de uma vez! Como o maior expoente é , o maior número positivo em binário seria:
O menor número negativo seria em binário:
Passo 2
Agora ele quer saber se está entre os valores que achamos. Como não podemos comparar um número no sistema decimal com um no binário, vamos converter para binário:
Logo,
Ou seja, ele está entre os valores encontrados nas letras e .
Resposta
Ei, a resposta está no passo a passo :)
Exercício Resolvido #4
Lista 1 – Professor Raymundo – UFRJ – Questão 10a
Seja um computador binário, cujo sistema de ponto flutuante tenha para o sinal do número, para o expoente e para a mantissa num total de . Qual o menor número positivo e o maior número positivo nele representável.
Passo 1
Como temos para o expoente, o expoente máximo é dado por:
Portanto, o expoente mínimo será .
Também podemos pensar que a máquina vai do expoente até o , ou seja, do ao . Como queremos representar os números negativos também, subtraímos , de modo que os expoentes agora variam de até .
Passo 2
Para obter o maior número, devemos ter o maior expoente e a maior mantissa.
- O maior expoente: 15
- A maior mantissa: f= 0. (111111)
Colocando a mantissa na base decimal:
O valor máximo é dado por:
Sendo assim, o valor máximo que ela pode representar é:
Passo 3
O valor mínimo normalizado é dado por:
- O menor expoente: -14
- A menor mantissa: f= . (000000)
Observação: Só podemos ter essa mantissa toda 0 porque o valor normalizado já conta com um dígito 1 antes da vírgula.
Assim, o valor mínimo normalizado será:
Passo 4
O valor mínimo não normalizado é bem parecido, mas tem a seguinte diferença: não tem aquele 1 antes da vírgula. Então, para obter o valor mínimo, devemos considerar 0 antes da vírgula e o máximo de 0s possíveis na mantissa, colocando 1 apenas no dígito de menor valor. Assim:
- A menor mantissa: f= 0. (000001)
Passando a mantissa para a base decimal:
Assim, o menor valor não normalizado é dado por:
Resposta
Maior número positivo:
Menor número positivo normalizado:
Menor número positivo não normalizado:
Exercício Resolvido #5
Lista 1 – Professora Luziane – UFRJ – Questão 3
Suponha que estejamos usando uma máquina que funciona em base e possui uma representação em , sendo para o sinal da mantissa, para o expoente e para a mantissa. A partir de que valor a máquina irá exibir na resposta ? E ?
Passo 1
Para descobrirmos que números causam e na máquina precisamos saber o número máximo que ela consegue representar, assim como o número mínimo.
Como temos para o expoente, o expoente máximo é dado por:
Onde é a base, é a quantidade de bits para o expoente e é a quantidade de bits para o sinal da mantissa.
Também podemos pensar que a máquina vai do expoente até o , ou seja, do ao . Como queremos representar os números negativos também, podemos subtrair para encontrar o expoente mínimo.
Então, o expoente mínimo será , de modo que os expoentes agora variam de até .
Passo 2
Sendo assim, o valor máximo que ela pode representar é:
Qualquer valor maior que esse causará .
Já o valor mínimo será:
Qualquer valor menor que esse em módulo causará .
Resposta
Ei, a resposta está no passo a passo :)
Exercício Resolvido #6
Adaptado da lista “Cálculo Numérico (ST462B/ST468B) Lista de exercícios 1 - Representação numérica e Erros” da Unicamp
Considere uma máquina cujo sistema de representação de número é definido por: 𝛽 = 10, 𝑘 = 4,𝑒 ∈ [−5,5]. Pede-se:
(a) Qual o menor e o maior número em módulo representados nesta máquina?
(b) Como será representado o número 73,758 nesta máquina, se for usado o arredondamento? E se for usado o truncamento?
Passo 1
(a) Qual o menor e o maior número em módulo representados nesta máquina?
Opaa, chega mais ! Vamos começar com esse exercício que parece moleza mas é cheio de detalhes. Tem um palpite de como se começa??
Veja bem, que informações o exercício nos dá? O problema nos fornece a base, o número máximo de algarismos que vamos colocar na mantissa e os valores mínimos e máximos de expoente (no intervalo de -5 até 5).
Então, vamos relembrar aquela estrutura que pode ser montada só com as informações que nós temos:
Sabendo que:
Nós conhecemos o valor de
Então, considerando a inequação acima podemos determinar o primeiro valor de
Que pode deve estar entre 1 e 9.
Fácil né? Então significa que podemos variar o nosso valor de (0,1....) até (0,9...).
O exercício fornece que k= 4, então nossos valores de d serão: , .
Para montar a estrutura do menor valor que a máquina pode registrar, devemos considerar que o primeiro dígito (qualquer zero a esquerda acaba sendo reconsiderado e reorganizado e vai parar laaaaaaaaaaaá no expoente) , e como determinamos ali em cima ele deve estar entre 1 e 9.
Como o menor valor entre 1 e 9, é o próprio 1 nosso assumirá essa forma.
Beleza, o e n= [-5,5].
A escolha do menor expoente é bem intuitiva né, qual é o menor valor -5 ou 5?
O menor valor é -5, heheheh
Agora é só montar aquela estrutura show de bola:
Lembra, nós temo as base, expoentes e . Mano, agora é só completar!!
O menor número, em valor absoluto, representado por essa máquina seria:
Enquanto o maior número seria:
Moleza né???
Vamos para o próximo passo!
Passo 2
(b) Como será representado o número 73,758 nesta máquina, se for usado o arredondamento? E se for usado o truncamento?
Ao organizarmos o número 73,758 no formato da aritmética de ponto flutuante, fica mais ou menos assim:
Mas, nós temos que deixar com a quantidade correta de números dentro da mantissa que foi sugerida pelo exercício de k= 4.
Vamo simbora!
Só dando uma relembrada como eu faço o arredontamento?
O arredondamento com k dígitos é dado por:
Se arredondamos para cima.
Se arredondamos pra baixo!
Legal, foca nesse número , a certeza que temos está em 0,737X , com 3 algarismos significativos e o último duvidoso!
E agora observe bem: o próximo algarismo em e então arredondamos para CIMA!
Então, com a técnica de arredondamento fica assim:
No truncamento fica como?
No truncamento nós terminamos em
Observe que temos:
Ao para em para fazer o truncamento, fica assim:
Resposta
- Mínimo:
- Arredondamento :
Máximo:
Truncamento :
Exercício Resolvido #7
Lista 1 – Professor Daniel – UFRJ – Questão 3
Considere uma máquina com sistema de representação de números definido por: base , dígitos na mantissa e expoente no intervalo . Como será representado o número nesta máquina se for usado o arredondamento. E se for usado o truncamento?
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 ! Então não tem que passar nada pra nada haha. É só passar pra notação normalizada de ponto flutuante:
Usando o truncamento temos:
E usando o arredondamento:
Repare que, como temos um expoente maior que o expoente máximo da máquina, ela acusaria overflow!
Resposta
Truncamento:
Arredondamento:
A máquina acusaria overflow.
Exercício Resolvido #8
Lista 1 – Professor Raymundo – UFRJ – Questões 3 até 7
Um computador armazena números reais utilizando para o sinal do número, para o expoente e para a mantissa. Admitindo que haja arredondamento, como ficariam armazenados os seguintes números decimais?
Em seguida, responda:
Qual o valor verdadeiramente representado em cada caso acima?
Qual o maior e o menor número positivo nele representável?
Qual o menor número maior que nele representável?
Qual o maior número menor que nele representável?
Passo 1
Os do expoente variarão de até , isto é, de até . Como precisamos representar expoentes negativos, subtraímos disso de modo que o expoente agora varie de até .
Passando o número para binário.
Então, . Repare que esse na frente do binário é aquele 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 mantissa e casas decimais, não precisaremos cortar nenhuma.
Quanto ao expoente , precisamos somar aqueles que calculamos para obtermos o expoente certo.
A representação no sistema será:
Passo 2
Passando o número para binário. Primeiro a parte inteira:
Agora a parte fracionária:
Então, . Temos mantissa e casas decimais, então não precisaremos cortar nenhuma.
Consertando o expoente:
A representação no sistema será:
Passo 3
Passando o número para binário. Primeiro a parte inteira:
Agora a parte fracionária:
Então, . Temos mantissa e 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 , já que o número é negativo.
Consertando o expoente:
A representação no sistema será:
Passo 4
Passando o número para binário.
Opa, estamos repetindo, então temos uma dízima!
Logo, . Temos 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 nela, que foi o que eu fiz ali em cima. E novamente temos um número negativo, então primeiro dígito .
Consertando o expoente:
A representação no sistema será:
Passo 5
Passando o número para binário. Primeiro a parte inteira:
Agora a parte fracionária:
Opa, estamos repetindo, então temos uma dízima!
Logo, . Novamente temos 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 nela. Por fim, como o número é negativo, então o primeiro dígito é .
Consertando o expoente:
A representação no sistema será:
Passo 6
Passando o número para binário. Primeiro a parte inteira:
Agora a parte fracionária:
Opa, caímos naquele loop do que já sabemos que vai dar uma dízima! É só pegarmos o valor do da outra letra e botarmos um na frente que teremos o resultado do !
Logo, . Temos na mantissa e infinitos no nosso número, então arredondamos.
Consertando o expoente:
A representação no sistema será:
Passo 7
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:
(valor exato)
(valor exato)
Nessa letra tivemos que cortar as casas decimais. Consequentemente o valor representado foi apenas a parte inteira .
O valor representado foi .
O valor representado foi .
O valor representado foi
Passo 8
Qual o maior e o menor número positivo nele representável?
Maior número positivo:
Menor número positivo na forma normalizada:
Menor número positivo na forma não normalizada:
Passo 9
Qual o menor número maior que nele representável?
Primeiro vamos representar nele:
Então temos que já com as casas decimais da mantissa. O número imediatamente seguinte seria:
Você também poderia reparar que o ocupa da mantissa sobrando apenas para a parte decimal. O menor número fracionário que se pode fazer com é , então o número imediatamente após de nesse sistema tem que ser
Passo 10
Qual o maior número menor que nele representável?
Mesmo esquema da última, vamos representar o :
Então . O número imediatamente anterior seria:
Analogamente ao anterior, o número ocupa da mantissa, sobrando mais para a parte fracionária. A menor fração que podemos fazer nesse caso é . Então o número imediatamente anterior a nesse sistema é
Resposta
.
.
.
Maior número positivo:
Menor número positivo na forma normalizada:
Menor número positivo na forma não normalizada:
Exercício Resolvido #9
Lista 1 – Professora Luziane – UFRJ – Questão 4 Adaptada
Considere um computador que opera em base , 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.
Passo 1
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:
Assim, a representação normalizada será:
Então o número sendo representado é:
Passo 2
Repare que aqui temos toda a característica cheia de , mas a mantissa diferente de zero. Isso é um caso onde a máquina acusaria (not a number).
Passo 3
Aqui temos expoente todo no e a mantissa zerada. Como , essa seria a representação de .
Passo 4
Como temos expoente igual a e uma mantissa diferente de , isso indica um número não normalizado. Consideramos então a mantissa entre e e expoente mínimo ficando com:
Então o número sendo representado é:
Passo 5
Temos o expoente e a mantissa zerada. Como , essa seria a representação de .
Passo 6
Então o número sendo representado é:
Passo 7
Resposta