(Precisão de Float)
a) Escreva um programa que verifique a quantidade de casas decimais que podem ser representadas corretamente usando float (ponto flutuante de 32 bits).
b) Repita o experimento usando double (64 bits) e compare os resultados.

Passo 1

Beleza, o exercício pede pra gente descobrir, de maneira prática, quantas casas decimais (ou melhor, quantos dígitos decimais de precisão) o tipo float (32 bits) e o tipo double (64 bits) conseguem representar certinho. Isso cai dentro de “ponto flutuante” e a ideia-chave é usar o conceito de épsilon de máquina (machine epsilon): o menor número ε tal que 1 + ε seja diferente de 1. A partir daí a gente converte esse ε em dígitos decimais.
Pra resolver isso, vamos precisar de:
  • Um laço que vá reduzindo ε até 1 + ε/2 == 1 (entendendo que aí ε é o menor passo que faz diferença).
  • A teoria de que o número de dígitos decimais ≃ .

Passo 2

Calcular o épsilon de máquina para float.
  1. Começamos com
    .
  2. Enquanto 1.0f + ε_f/2 != 1.0f, dividimos por 2.
    Isso garante que a gente ache o menor valor que ainda faz 1 + ε_f exceder 1.
  3. Quando o teste falhar, é nosso épsilon de máquina para float.
Teoria: em ponto flutuante, existe um “gap” mínimo entre 1 e o próximo valor maior. Esse gap é o épsilon de máquina.

Passo 3

Converter ε_f em dígitos decimais.
A fórmula aproximada é
df approx -log10(varepsilonf)
Explicando: se , então a gente pode confiar em cerca de 7 dígitos decimais. O logaritmo em base 10 faz essa conversão de “tamanho do gap” para “quantidade de casas decimais”.

Passo 4

Repetir o mesmo para double.
  1. dd approx -log10(varepsilond) (tipo double).
  2. Enquanto 1.0 + ε_d/2 != 1.0, dividir por 2.
  3. Ao final, é o épsilon de máquina do double.
  4. Calcular

Passo 5

Comparar os resultados:
  • A gente vai ver que é algo perto de , então .
  • Para double, fica em torno de , logo .

Resposta

  • float (32 bits) representa corretamente cerca de 7 dígitos decimais.
  • double (64 bits) representa corretamente cerca de 16 dígitos decimais.

Exercícios relacionados