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: 1817



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

Criando um sistema de integração contínua (CI/CD)

Fazendo a integração contínua de Jenkins, Sonatype Nexus, Sonatype, JUnit e Gradle para automatizar processos repetitivos. Prática bastante usada em tecnologias de DevOps.

Criando artes de texto usando imagens

Convertendo imagens para ascii art usando o valor da intensidade das cores cinzentas.

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.

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

Desenvolvendo o campo de visão de um personagem em um plano 2D

Detectando objetos que entram dentro do campo de visão do personagem. Útil para servir de "gatilho" para eventos em um jogo.

Veja também

Um algoritmo não pode ser composto por instruções ambíguas, isso pode trazer resultados inesperados

Os algoritmos na ciência da computação são o principal meio para o desenvolvedor poder escrever instruções para o computador, operando a sua maneira

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...

Algoritmo A* (A-estrela)

Algoritmo que busca o caminho com o menor custo entre dois pontos. É usado em jogos e aplicativos de navegação para calcular a menor distância possível.

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.

IaaS (Infrastructure as a Service)

Computador virtual. Fornece infraestrutura de computação básica distribuída em vários locais, oferecendo mais flexibilidade e escalabilidade.

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.