(Cálculo do Épsilon de Máquina) Escreva um programa Python que encontre o épsilon de máquina da sua máquina local usando um loop while.

Passo 1

Beleza, vamos entender qual é a parada: o exercício pede pra escrever um programinha em Python que identifica o épsilon de máquina da sua máquina local usando um loop while. O conteúdo aqui é de ponto flutuante (floating point) e estrutura de repetição (loop). A gente vai precisar saber que o épsilon de máquina, varepsilon, é o menor valor que, somado a 1, ainda faz diferença no computador (ou seja, 1 + varepsilon > 1 em ponto flutuante). Também vamos precisar entender while e como comparar floats em Python.

Passo 2

Teoria na prática:
  • Em ponto flutuante, números muito próximos de 1 não conseguem mais “incomodar” o 1, porque a precisão se esgota.
  • A definição de épsilon de máquina é exatamente esse menor varepsilon tal que
1 + varepsilon > 1
- Se a gente pegar um valor inicial de varepsilon, tipo 1.0, e for dividindo por 2 até que a soma com 1 não mude, a última divisão válida é o nosso épsilon.

Passo 3

Esboçando o algoritmo em palavras de amigo:
  1. Começou com epsilon = 1.0.
  2. Enquanto 1.0 + epsilon/2 > 1.0, vamos dizer que ainda dá para diminuir epsilon.
  3. A cada iteração, atualizamos epsilon = epsilon / 2.
  4. Quando 1.0 + epsilon/2 == 1.0, a gente parou demais, então o nosso épsilon de máquina é o epsilon antes de dividir pela última vez.

Passo 4

Escrevendo o código em Python (com comentários explicando cada passo):
# Começamos com epsilon = 1
epsilon = 1.0

# Loop até que 1 + epsilon/2 já não seja maior que 1
while 1.0 + epsilon/2 > 1.0:
    # vamos reduzir epsilon pela metade
    epsilon = epsilon / 2

# Quando sair do while, epsilon já é metade do último que fez diferença
# Então precisamos multiplicar por 2 pra voltar ao valor correto
epsilon = epsilon * 2

print("Épsilon de máquina é:", epsilon)

Passo 5

Por que multiplicar por 2 no final? Porque o loop só para quando a divisão por 2 deixou de fazer diferença. Então, no momento que a condição falha, epsilon já está menor do que deveria. Aí a gente volta uma divisão, multiplicando por 2, para achar o último valor válido.

Resposta

Executando esse código, você vai ver algo em torno de:
Épsilon de máquina é: 2.220446049250313e-16  
Esse valor é o varepsilon de máquina do formato double precision (64 bits) que o Python usa.

Exercícios relacionados