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!
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
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
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.
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.
Sim, olhando melhor o código o tal epsilon grande era usando só na porta... De qualquer forma você pode então errar o momento de saída (já que porta ficou larga demais).
Paulo
Paulo