epsilon

epsilon

por Ana Carolina Ribeiro Gomez -
Número de respostas: 3
o monitor comentou na correção do meu EP que o meu epsilon era grande demais (comentário dele: " utilizou um epsilon consideravelmente grande considerando que estamos em uma sala de 1x1m....O razoavel serial 10^-8")
eu realmente não entendi da onde o 10-8 veio. Eu não sei calcular um epsilon razoável! Como esse problema vai continuar no EP2, alguém pode me explicar o que é um "epsilon razoável" considerando uma sala de 1x1?
Obrigada!
Em resposta à Ana Carolina Ribeiro Gomez

Re: epsilon

por Paulo José da Silva e Silva -
Olhei o seu EP rapidamente e parece que você usou 10^-2 com epsilon e realmente esse valor é grade. Imagine a quantidade de erros que isso pode gerar com o decorrer das contas. Em particular esse tamanho é ainda visível na janela (você mesmo usa-o como raio da bola).

O epsilon é um valor muito, muito pequeno. O engraçado é que seu EP tem esse trecho:

#O programa tem muitas contas com divisao por velocidade, por isso
#evito que ela valha zero fazendo com que, caso a entrada seja zero,
#avelocidade tenha um valor desprezivel.
xvelocidade = velocidadeX if velocidadeX != 0.0 else 0.00000001
yvelocidade = velocidadeY if velocidadeY != 0.0 else 0.00000001

Ou seja, quando você tentou escolher um valor pequeno (despresível), você mesma chutou o tal 10^-8.

Sobre a sugestão do monitor para esse valor, creio o que ele está pensando na precisão com que os números são guardados no computador. Eles tem internamente 16 casas, assim para comparar com 1 o valor menor possível é algo em torno de 10^-16. O 10^-8 é justamente a raiz quadrada desse número, que muitas vezes é usada como um valor pequeno mas não completamente insignificante. Assim, se você está pensando em valores em torno de 1, 10^-8 é uma boa escolha. Já se a sala tivesse dimensão 1000x1000, seria interessante 1000*sqrt(10^-16) = 1000 * 10^-8 = 10^-5.

abraço,

Paulo
Em resposta à Paulo José da Silva e Silva

Re: epsilon

por Ana Carolina Ribeiro Gomez -
essa parte da velocidade zero foi um pouco de coincidência mesmo... Ele descontou pontos desta parte, mas eu estava esperando por isso porque foi uma "solução" feia.
Eu concordo com o que você disse e vou usar um epsilon menor no meu EP2. Só queria dizer que eu tenho a forte impressão de que, mesmo meu epsilon seja grande, ele não causa uma grande quantidade de erros no meu programa.
Isso porque na verdade eu só usei o epsilon para checar se a bola saiu pela porta e para terminar o meu while a menos de epsilon de 200 segundos.
Na parte de checar se a bola saiu pela porta, eu achei razoável usar um epsilon da ordem do raio da bola (foi uma idéia ruim, concordo!).
Na parte de parar a simulação um pouco antes, não há problema pois o meu resultado final sempre é atualizado para a posição no tempo final, que é sempre 200.0 ou o instante que a bola passa pela porta. O que eu quero dizer é que para batidas normais com a parede eu não faço comparações, logo não vejo como o meu epsilon poderia causar grandes erros.
Só pra deixar claro, não estou reclamando da correção aqui. Só quero entender mesmo.