Sistemas de ponto flutuante
Como e quão bem computadores representam números
Vamos lá?
Seria ótimo que todas as contas feitas nos computadores fossem exatas. Infelizmente esse não é o caso. Para entender o por que disto, precisamos entender como número são representados internamente nos computadores e tentar quantificar a qualidade dessa representação. Esse é o assunto dessa aula.
- 1
- 2
- 3
Em um sistema de ponto flutuante, com base 10, capaz de representar 4 dígitos na mantissa e 1 no expoente, quais das alternativas abaixo são corretas?
Em um sistema de ponto flutuante, com base 10, capaz de representar 4 dígitos na mantissa e 1 no expoente, quais dessas outras alternativas são corretas?
Em um sistema de ponto flutuante...
O computador, com sua memória finita, não é capaz de representar todos os números reais. De fato, não é possível representar nem mesmo um único número irracional, uma vez que não haveria como armazenar os infinitos dígitos que o compõem. No computador apenas alguns números racionais e dentro de um intervalo finito são passíveis de serem armazenados. A representação para esses números é conhecida como representação em ponto flutuante e os parâmetros e propriedades que definem essa representação constituem um sistema de ponto flutuante ou SPF.
Vamos entender como funciona a representação em ponto flutuante através de um exemplo. Suponha que
Com base nesses exemplos, um sistema de ponto flutuante
Repare que ao determinar o último dígito significativo sempre é preciso inspecionar o dígito seguinte. Caso este seja maior ou igual a
Ainda em
A qualidade ou precisão de um sistema de ponto flutuante é definida como o erro no compto das operações aritméticas elementares (soma, subtração, produto e divisão). Não devemos confundir precisão com acurácia, que quantifica o erro no cálculo de uma aproximação para a solução de um problema como um todo. A precisão de um SPF é quantificada através da unidade de arredondamento, definida como o menor número positivo de ponto flutuante
Uma forma de determinar a unidade de arrendondamento da máquina é descobrir qual o menor valor para
Praticamente todo computador segue o SPF definido no padrão IEEE-754 . Nesse padrão, há duas formas de representar números de ponto flutuante, dependendo do espaço reservado para o armazenamento. Em precisão simples, onde cada número ocupa 4 bytes, o SPF é
A unidade de arredondamento pode ser conferida no Octave com o comando eps
. No Octave, todas as variáveis reais são armazenadas em precisão dupla, a menos que explicitamente inicializadas em precisão simples com o comando single
.
Na próxima aula veremos como a precisão de um SPF afeta o resultado de contas quando mais de uma operação for efetuada.
Observações adicionais
Nesta aula usamos como exemplo sistemas de precisão finita em base 10 apenas para facilitar a apresentação dos conceitos. Computadores e outros dispositivos digitais utilizam a base 2. Isto tem algumas implicações não tão óbvias. Em nossos exemplos com base decimal, os números apresentados representam exatamente os valores que estariam armazenados no sistema de ponto flutuante. Entretanto, quando a base binária é utilizada, é necessário um passo de conversão de base para apresentar o resultado, uma vez que nós, humanos, preferimos ver os números na base decimal. Essa conversão entre bases também ocorre quando inicializamos uma variável no computador. Por exemplo, o código a = 0.2
significa que o número decimal a
.
Dito isto, não devemos confundir a exibição do valor de uma variável com o que de fato está armazenado nela. Por exemplo, considere o bloco de código executado no Octave
a = sqrt(2); b = single(sqrt(2)); format native-bit a, b a = 1011001111011100111111100110011001111001000001010110111111111100 b = 11001111001000001010110111111100 format short a, b a = 1.4142 b = 1.4142 format long a, b a = 1.414213562373095 b = 1.4142135
Apenas quando escolhemos o formato native-bit
estamos vendo os valores exatos das variáveis a
e b
, armazenados no computador. Porém essa exibição é, no mínimo, inconveniente. O usual é utilizar outro formato de exibição. A exibição padrão do Octave é conseguida com format short
. Perceba que neste formato as variáveis a
e b
parecem ter o mesmo valor, visto que apenas 5 dígitos significativos estão sendo exibidos. Usando o format long
, podemos ver que a
é de fato diferente de b
.
A intenção aqui não é que você saiba tudo sobre representação em ponto flutuante ou, mais ainda, sobre questões intrínsecas à implementação de um sistema de ponto flutuante. Entretanto, você precisa estar ciente de que os números que você vê no computador, quando exibe uma variável, não são exatamente os números que estão armazenados, por conta das conversões de base.
Referências
O texto de Steve Hollasch sobre o padrão IEEE-754 é muito bom e didático. Recomendo aos interessados no assunto lerem. A revisão feita em 2019 no padrão IEEE-754 está aqui.
IEEE Standard for Floating-Point Arithmetic, in IEEE Std 754-2019 (Revision of IEEE 754-2008), pp.1-84, 22 July 2019, doi: 10.1109/IEEESTD.2019.8766229.
Michael L. Overton. Numerical Computing with IEEE Floating Point Arithmetic. SIAM, 2001.
Para os exercícios abaixo, considere o SPF
1. Qual a distância entre os dois menores números positivos representáveis no SPF? Qual a distância entre os dois maiores números representáveis no SPF?
2. Estime a unidade de arredondamento de seu computador, calculadora científica e calculadora do celular. Qual dos seus dispositivos tem a melhor precisão? Para isso utilize o algoritmo abaixo.
- u
1 - enquanto (1+u) > 1, repita:
- u
u/2 - u
2u
Por que a redução no valor da variável u
é feita dividindo-o por 2? Se, ao invés disto, u
fosse multiplicado por um fator diferente, como 0.8, por exemplo, isso faria diferença? Faça experimentos, conjecturas. Discuta.
3. Determine o resultado das operações abaixo e qual o erro relativo esperado em cada uma delas, quando realizadas no sistema de ponto flutuante.
-
, -
, -
-
, , e
(a)