FPU Unidade de ponto flutuante

Faz cálculos aritméticos com números fracionários usando notação científica, economizando mais bits. Também chamado de vírgula flutuante.

Categoria de Tecnologia

Postado em 15 março 2023

Atualizado em 15 março 2023

Palavras-chave: fpu,cpu,agu,computador,componente,calculo,matematica,notacao,cientifica

Visualizações: 2836



Em meados dos anos 80, os processadores ainda enfrentavam desafios para realizar cálculos de aritmética com números que possuem vírgula. Nessa época, a unidade de ponto flutuante (FPU) era um componente opcional e separado do processador. Computadores que possuíam um FPU, passavam a ser chamados de computadores científicos.

Mesmo sem a presença de um FPU, os computadores ainda podem realizar cálculos de aritmética de números com vírgula. Usando softwares que simulam o funcionamento do FPU, instruções podem ser implementadas em nível de linguagem de programação. Porém, a velocidade do cálculo não é tão veloz e o resultado final não é muito preciso. Por essa razão, ter um componente em nível de hardware especializado em cálculos aritméticos de números com vírgula é essencial para a máquina ter um bom desempenho. Hoje, raramente existem computadores sem uma FPU integrada ao processador.

O que é a unidade de ponto flutuante (FPU)?

A unidade de ponto flutuante (FPU), em inglês “floating-point unit”, é um componente hardware especializado em realizar cálculos de números com vírgula. Esse componente começou a ser usado em computadores residenciais no ano de 1989, após o lançamento do Intel i486. Como referenciado no livro GAME ENGINE BLACK BOOK DOOM, a ausência da unidade de ponto flutuante era um grande problema para os computadores da época. Jogos como o DOOM, usavam a aritmética de ponto fixo para calcular a distância aproximada entre dois pontos.

O Intel i486 foi um marco importante no mercado de computadores pessoais, processadores passaram a calcular com mais precisão graças ao FP (floating-point), o que permitiu que cálculos de terceira dimensão (3D) pudessem ser realizados, contribuindo para o desenvolvimento de jogos e aplicativos inovadores na época.

Pelo fato da máquina trabalhar com a numeração binária, a representação dos números decimais acompanhados com vírgula apresenta problemas como falta de bits (número de dígitos não é suficiente). Por isso, a representação adotada pelos computadores é a notação científica.

notação científica e ponto flutuante

Como funciona o ponto flutuante?

Os computadores usam a notação científica para representar a posição da vírgula em um valor. Esse valor, em decimal pode ser processado usando o seguinte modelo:
m10e m * 10^e

  • Mantissa (m)
  • Base (10)
  • Expoente (e)

Assim, tendo um valor mais preciso e aproveitando melhor o uso dos bits.

A aplicação do modelo acima, pode ser realizado da seguinte maneira: Imagine que temos o valor decimal abaixo e queremos processar essa informação.

  • 5.000.000.000

O valor acima é de 5 bilhões. Usando a notação científica, podemos mudar a expressão.

  • 51095 * 10^9

Repare como é mais fácil de manipular o número acima usando notação científica. O valor foi divido em três elementos: mantissa (5), base (10) e expoente (9). Também é possível aplicar em números abaixo de zero:

  • 0,000123 = 1,231041,23 * 10^{-4}

Levando em consideração que os valores são gravados e processados em bits, diminuir o número de dígitos sem modificar o valor ajuda a economizar espaço. Os valores podem ser processados usando o formato float ou double, cujos formatos respectivamente podem representar o valor com 32 bits ou 64 bits. Como mostrado no exemplo acima, o computador normaliza o valor da mantissa do valor fracionário, deslocando a vírgula para a direção direita quando positivo e para esquerda quando negativo. Quando o número é menor do que zero, ele tem o expoente negativo e quando é maior do que dez, o expoente é positivo.

Ponto flutuante com número binários

Diferente dos humanos, a máquina processa as informações usando números binários. Por essa razão os cálculos devem ser realizados usando binários.

Imagine o seguinte valor de 43,167.

Para calcular o valor acima usando números binários, primeiro temos que segmentar o número antes da vírgula e transforma-lo em binário. Lembrando que para converter um número decimal em binário, temos que dividir essa número até ele chegar a zero e memorizar a sobra em cada divisão.

  • 43 / 2 = 21 (1)
  • 21 / 2 = 10 (1)
  • 10 / 2 = 5 (0)
  • 5 / 2 = 2 (1)
  • 2 / 2 = 1 (0)
  • 1 / 2 = 0 (1)

Na ordem de baixo para cima, juntamos os zeros e uns para ter o resultado final do número binário que é 101011. Em seguida, convertemos o valor após a vírgula em número binário, mas diferente da resolução acima, os números depois da vírgula serão multiplicados por 2 e serão marcados como sobra caso ultrapassem o 1.

  • 167 * 2 = 334 (0)
  • 334 * 2 = 668 (0)
  • 668 * 2 = 1,336 (1)
  • 336 * 2 = 672 (0)
  • 672 * 2 = 1,344 (1)

Quando um dos valores se repetem, podemos parar a multiplicação. Diferente dos números antes da vírgula, os números depois da vírgula tem as suas sobras juntadas de cima para baixo: 00101.

No final temos um valor binário de 101011,001012101011,00101_2.

Em seguida precisamos aplicar a notação científica no resultado. Normalizamos a mantissa do valor deslocando a vírgula para a esquerda 5 casas e escrevemos o expoente:

  • 1,0101100101251,0101100101 * 2^5

O resultado acima, em um formato float de 32 bits terá os seguintes aspectos:

  • 1 bit para indicar o sinal do expoente
  • 8 bits para indicar o valor do expoente
  • 23 bits para a fração normalizada

ponto flutuante

Conclusão

A unidade de ponto flutuante é um componente capaz de fazer cálculos aritméticos usando a notação científica. A vírgula flutuante permite que a máquina possa obter resultados mais precisos, possibilitando o desenvolvimento de aplicativos e jogos que necessitam de precisão e eficiência no processamento de números complexos.

Projetos práticos

Desenvolvendo um jogo de quebra blocos em javascript

Programando um jogo clássico de arcade usando javascript e p5.js. O usuário deve quebrar os blocos utilizando uma bola ao mesmo tempo que evita que a bola saia pela parte inferior da tela

Criando um sistema de mini garagem automatizada integrada com um sistema de monitoramento independente

Desenvolvimento de um sistema de monitoramento que exibi todos os eventos que acontecem na garagem automatizada, como abertura de portões ou ocupação de vagas.

Criando um jogo de guerra nas estrelas em javascript usando a biblioteca p5.js

Jogo simples de guerra espacial desenvolvido em javascript. Esse jogo usa cálculos de física para simular efeitos de atrito e inércia.

Integrando o PHP com Elasticsearch no desenvolvimento de um sistema de busca

Projeto de criação de um sistema de busca usando o framework Symfony e Elasticsearch. A integração com Kibana também é feito de modo remoto com um raspberrypi.

Criando um jogo de pacman usando javascript e pixi.js (parte 1)

Desenvolvimento dos conceitos mais básicos do clássico pacman, como: mapa, animação, deslocamento e detector de colisões.

Veja também

Ainda nos primórdios da internet discada, o maior medo de um usuário era o telefone tocar...

Esperávamos horas para baixar apenas alguns megabytes. Nessas horas, quando o telefone tocava nós fazíamos de tudo para não atender o telefone. Mas infelizmente nem sempre dava certo....

Os robôs estão aprendendo por conta própria?

Já não é mais novidade saber que os robôs não precisam mais da orientação de um humano para aprender. Além disso, os robôs já superam os humanos em muitas áreas...

Sinal de relógio (clock)

Sinais elétricos pulsantes emitidos por um oscilador que são convertidos em ondas quadradas responsáveis por sincronizar os componentes de um sistema.

LAN

Rede local de computadores (LAN) é um conjunto de computadores ou dispositivos conectados uns aos outros de forma isolada em um pequeno local.

Busca binária

A busca binária usa o método de divisão de conquista que visa em dividir os problemas em pequenos problemas até que eles se resolvam sozinhos.

Vetores geométricos

Caracterizam uma grandeza física que possui módulo, direção e sentido. Pode simular eventos como queda, atração e deslocamento de objetos em um meio.