(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 , é o menor valor que, somado a 1, ainda faz diferença no computador (ou seja,
em ponto flutuante). Também vamos precisar entender
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,
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
tal que
- Se a gente pegar um valor inicial de
Passo 3
Esboçando o algoritmo em palavras de amigo:
- Começou com
epsilon = 1.0
. - Enquanto
1.0 + epsilon/2 > 1.0
, vamos dizer que ainda dá para diminuirepsilon
. - A cada iteração, atualizamos
epsilon = epsilon / 2
. - Quando
1.0 + epsilon/2 == 1.0
, a gente parou demais, então o nosso épsilon de máquina é oepsilon
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
de máquina do formato
double precision
(64 bits) que o Python usa.