| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/03/2008 15:53:31
|
Alkamavo
JavaEvangelist
![[Avatar]](/images/avatar/0c9fd755f1e941587cabab631a81f89e.png)
Membro desde: 20/11/2007 09:44:18
Mensagens: 305
Localização: United States Of Java...
Offline
|
tnho este metodo para calcular as raizes de uma parabola e devolver-me um vector com eles la dentro organizados em ordem decrescente...
Infelizmente para certos imputs nao me retorna o valor correcto..
O tipo double é assim tao manhoso????
a main dela é:
para uns valores da certo..
mas para uma parabola com os coeficientes
3 -100 423
ou
-2 100 14
prega-me partida....
|
"Vocês riem de mim por eu ser diferente, e eu rio de vocês por serem todos iguais" - Bob Marley |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/03/2008 16:02:48
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline
|
Tente colocar parênteses entre os (2 * a).
Geralmente, as operações de divisão geram imprecisão.
Então é melhor fazê-las antes de multiplicar, não depois (para não multiplicar a imprecisão).
|
@ViniGodoy - Lattes
Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!
Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).
Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/03/2008 16:07:53
|
Alkamavo
JavaEvangelist
![[Avatar]](/images/avatar/0c9fd755f1e941587cabab631a81f89e.png)
Membro desde: 20/11/2007 09:44:18
Mensagens: 305
Localização: United States Of Java...
Offline
|
valeu vini......
era ai onde estava o problema.....Obrigado...
|
"Vocês riem de mim por eu ser diferente, e eu rio de vocês por serem todos iguais" - Bob Marley |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/03/2008 16:43:18
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline
|
Já parou para pensar pq os números de ponto flutuante são imprecisos em potências diferentes de 2? Um número é impreciso pq, depois da vírgula, cada bit ligado representa 2^-n, onde n é o número da casa contada da direita pra esquerda, a partir do 1. Assim, o número 2,5 seria representado em binário por: 2 = 10 0,5 = 0.1 2,5 = 10.1 Agora, considere o esforço de escrever uma fração que não é mútipla de 2, como 0,3, usando potências de 2: A primeira potência que usaríamos poderia ser 1/4, que é 0,25. Para melhorar a precisão, podemos somar 1/32, que é 0,03125. Obteríamos então, 0,28125. E se quiséssemos aumentar ainda mais a precisão? Daria para somar 1/64, que é 0,015625, e obteríamos 0,296875... Nosso número já está assim: 0,3 = 0,010011 Poderíamos continuar somando com divisores multiplos de 2 cada vez maiores, mas difícilmente chegaríamos em 0,3. Esse comportamento assintótico é extremamente inconveniente e, para uma base como 2, extremamente frequente. Com isso, vemos que o sistema de base 2 é muitíssimo pobre para representar números que não podem ser obtidos por frações de 2. E daí que vem essa imprecisão toda. O que o hardware faz é aumentar (muito) o número de bits quando contas envolvendo floats são feitas. Isso atenua o problema, mas não o resolve. Pequenas dicas de programação (como multiplicar antes de dividir, quando possível) também ajudam.
This message was edited 4 times. Last update was at 21/04/2012 15:48:00
|
@ViniGodoy - Lattes
Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!
Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).
Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/03/2008 17:02:08
|
Alkamavo
JavaEvangelist
![[Avatar]](/images/avatar/0c9fd755f1e941587cabab631a81f89e.png)
Membro desde: 20/11/2007 09:44:18
Mensagens: 305
Localização: United States Of Java...
Offline
|
impressionante..k meu professor nunca falou nisso...
|
"Vocês riem de mim por eu ser diferente, e eu rio de vocês por serem todos iguais" - Bob Marley |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/03/2008 17:18:39
|
thingol
Moderador
Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline
|
ViniGodoy wrote:
Com isso, vemos que o sistema de base 2 é muitíssimo pobre para representar números que não podem ser obtidos por frações de 2. E daí que vem essa imprecisão toda. O que o hardware faz é aumentar (muito) o número de bits quando contas envolvendo floats são feitas. Isso atenua o problema, mas não o resolve. Pequenas dicas de programação (como multiplicar antes de dividir, quando possível) também ajudam. E foi isso que resolveu seu caso. 
Como dizia meu professor, não teríamos problemas com a base 2 se tivéssemos 4 dedos nas mãos e nos pés, como é o caso daqueles personagens de desenhos animados da Disney (Mickey, Pateta etc.). É que aí provavelmente iríamos usar base 4, 8 (duas mãos) ou 16 (mãos e pés). A base 16 seria particularmente interessante.
|
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/03/2008 09:33:51
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline
|
thingol wrote:
Como dizia meu professor, não teríamos problemas com a base 2 se tivéssemos 4 dedos nas mãos e nos pés, como é o caso daqueles personagens de desenhos animados da Disney (Mickey, Pateta etc.). É que aí provavelmente iríamos usar base 4, 8 (duas mãos) ou 16 (mãos e pés). A base 16 seria particularmente interessante.
A humanidade já trabalhou com base 16. No passado, os babilônicos usavam os nós dos dedos (e as pontas) para fazer contagem de ovelhas e o polegar servia para saber onde a contagem estava. Alguns matemáticos usavam até mesmo uma notação com 16 símbolos, sendo o primeiro símbolo o número 1 e o último o 16.
|
@ViniGodoy - Lattes
Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!
Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).
Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295 |
|
|
 |
|
|