| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/05/2010 15:57:09
|
thiagofesta
JavaGuru
![[Avatar]](/images/avatar/eff4ceddd4035b36233219a6ea4b889e.png)
Membro desde: 19/12/2007 10:42:11
Mensagens: 233
Offline
|
Boa tarde, Tenho uma parte de um código aqui que pega a posição do mouse e faz uma divisão, mas esse valor da tipo: 56 / 81 = 0,66666666666666666666666666666667 No programa faço: float f = (float) ((float) x / (float) y); mas o maldito do f vem com 0,66666666 (apenas 8 casas decimais!) o X e Y vem de um int do getX() e getY() de mouseevent Obs: preciso ser preciso, pois efetuop calculos geometricos, e devido a esse "truncamento", da erro.
This message was edited 1 time. Last update was at 27/05/2010 15:59:19
|
"É melhor calar-se e deixar que as pessoas pensem que você é tolo, do que falar e acabar com a dúvida"
Abraham Lincoln |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/05/2010 16:01:35
|
juliofsn
JavaEvangelist
![[Avatar]](/images/avatar/b1491b673670aeae2dbf8827ba87a758.jpg)
Membro desde: 21/11/2006 20:48:46
Mensagens: 311
Offline
|
Use double para aumentar a precisão.
Se você quer precisão máxima, então use BigDecimal
|
Que a Força esteja com Você! |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/05/2010 16:03:43
|
thiagofesta
JavaGuru
![[Avatar]](/images/avatar/eff4ceddd4035b36233219a6ea4b889e.png)
Membro desde: 19/12/2007 10:42:11
Mensagens: 233
Offline
|
juliofsn wrote:Use double para aumentar a precisão.
Se você quer precisão máxima, então use BigDecimal
Com double ele de fato aumenta a precisão, mas não aparece o maldito do 7 la do fim.
Está estranho isso!
Vou tentar com BigDecimal
Segundo o ViniGodoy é pra usar float em calculos científicos que precisam ser precisos (meu caso)
|
"É melhor calar-se e deixar que as pessoas pensem que você é tolo, do que falar e acabar com a dúvida"
Abraham Lincoln |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/05/2010 16:11:08
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20578
Localização: Curitiba/PR
Offline
|
É mesmo, quando ele falou isso? Na verdade, eu já fiz algumas postagens explicando porque floats e doubles são imprecisos: http://www.guj.com.br/posts/list/84121.java#448928 http://www.guj.com.br/posts/list/68086.java#357907 Troque sua variável para double. Embora para gráficos, geralmente floats são suficientemente precisos. O BigDecimal, se você estiver fazendo um jogo ou vídeo é muito lento.
This message was edited 1 time. Last update was at 27/05/2010 16:11:37
|
@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) 27/05/2010 16:13:47
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20578
Localização: Curitiba/PR
Offline
|
Aliás, como uma imprecisão na 29º casa decimal está gerando algo perceptível em seu desenho? Acho mais provável ter algum tipo de erro do seu cálculo.
|
@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) 27/05/2010 16:21:05
|
thiagofesta
JavaGuru
![[Avatar]](/images/avatar/eff4ceddd4035b36233219a6ea4b889e.png)
Membro desde: 19/12/2007 10:42:11
Mensagens: 233
Offline
|
ViniGodoy wrote:Aliás, como uma imprecisão na 29º casa decimal está gerando algo perceptível em seu desenho? Acho mais provável ter algum tipo de erro do seu cálculo.
Estou achando o ponto médio de uma reta. e depois uso para efetuar calculos com a equação fundamental da reta para ver se um ponto está na reta. E ele está aredondando, e não sei o motivo, vou ver os links que você mandou.
|
"É melhor calar-se e deixar que as pessoas pensem que você é tolo, do que falar e acabar com a dúvida"
Abraham Lincoln |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/05/2010 16:48:19
|
sergiotaborda
GUJ Expert
![[Avatar]](/images/avatar/b4a0e0fbaa9f16d8947c49f4e610b549.png)
Membro desde: 22/03/2005 20:57:48
Mensagens: 3433
Offline
|
thiagofesta wrote:
juliofsn wrote:Use double para aumentar a precisão.
Se você quer precisão máxima, então use BigDecimal
Com double ele de fato aumenta a precisão, mas não aparece o maldito do 7 la do fim.
Está estranho isso!
Isso não é nada estranho. Vc que não sabe trabalhar com numeros.
Primeiro 56/81 é 0,(691358024)
É uma dizima periodica de periodo 691358024.
Mas mesmo que fosse o numero que diz,o numero seria 0,(6) dizima periodica de periodo 6
voc não pode esperar dividir e depois multipliar e dar o mesmo. Nem com bigdecimal isso funciona.
O algoritmo tem que parar em algum ponto , se a dizima é infinita isso causa um arredondamento na ultima casa...
O que vc precisa é o usar o padrão Ratio, para apenas fazer o calculo real no final
com float, double, bigdecimal vc faz
por outro lado, precisão é sempre relativa. não existe nada abssoluto. qual é a sua margem de erro ? (não sabe qual é? então seus calculos nunca serão precisos )
|
Criando sua própria API de Validação
Blog do MiddleHeaven |
|
|
 |
|
|