Pequena duvida double x float

Bem… vejamos se entendi corretamente.

Em relação ao float:
Double é 64 bits, tem mais precisão, ocupa mais espaço na memoria e não pode ser convertido em float (enquanto float pode ser convertido em double).

Então sempre que possível devo usar float para economizar espaço e só usar double quando float não der conta do recado (como em números ou contas maiores, sei la…)? Ou estou entendendo errado ?

Obrigado :slight_smile:

É isso mesmo o que vc disse!

Se quizer ver melhor a definição da uma olhada neste site:
http://www.dm.ufscar.br/~waldeck/curso/java/part22.html

vlw
:smiley:

Apenas tres detalhes:

  1. double pode ser convertido pra float sim, explicitamente. No caso o compilador exige que a conversao seja explicita pq pode haver perdas e ele quer que voce esteja ciente disso.

  2. Por padrao um literal será double. Só será float se voce o fizer explicitamente, como por exemplo { float f = 0.0F }

  3. double é para usado nao para numeros maiores, mas sim para PRECISAO maior. Pode ser ate para numeros menores :smiley:

carlos.e.a,

detalhe 1 e 2 ok !

Agora, quando dizemos precisão maior é que eu não entendo muito bem…
Pode dar um exemplo pratico ? Tipo um numero em que somente o double vai satisfazer em questões de precisão.

Rapaz, raramente voce vai ter que se preocupar com isso, mas ta ai um exemplo:

float teste = 0.0000000000000000000000000000000000000000000001F;

Isso vai dar erro. Ja se fizer

double teste = 0.0000000000000000000000000000000000000000000001;

nao vai ter problema. :smiley:

Voce poderia tambem fazer:

float teste = b [/b]0.0000000000000000000000000000000000000000000001; - Veja que aqui nao tem o F para float explicito, ou seja,funciona pq na verdade voce tem 1 double, que vai ser truncado.

Entendi ! Então é para grandes precisões mesmo hehe.
É que sempre que vou determinar uma variável de ponto flutuante fico com a duvida se deveria colocar float ou double. Acabo colocando double por ser mais prático e ter menos chances de errar :stuck_out_tongue:

Mas como costumo a ver muitos lugares com float, então resolvi pesquisar um pouco para fazer da forma mais correta.

Nesse caso, acho que já entendi quando usar cada um… se for uma variável de pequena precisão usarei float, se ela precisar ter uma grande precisão usarei double.

É isso mesmo né ? rsrs

Valeu pela ajuda.

Rapaz, nao foi por acaso que coloquei esse valor ai em cima. Se voce tirar 1 zero dai, voce tem a “precisao maxima” do float :smiley:

Eita… serio mesmo ? Que exagero hehe.

Poxa, mas essa precisão toda realmente ta me assustando. Que situações que eu necessito de toda essa precisão?
Seriam mais para usar números irracionais tipo pi e outras constantes do tipo ? Ou tem mais alguma aplicação ?
Até pra representar essas constantes, acho que até a 5ª ou 6ª casa decimal já resolveria o problema, hehe.

Isso na verdade é util para por exemplo potencias, polinomios, etc. Em metodos numericos na faculdade voce vê que isso é util para varias situacoes. Veja que (0.0000001)^5 ja mata o float ^ ^

Hmm… entendi. Eu to estudando java por conta própria, mas faço bacharelado em sistemas de informaçao… nem sei se vou ver isso. Ainda estou no começo hehe.
Mas obrigado mesmo pela ajuda ! Abraços.

magodasabedoria
Da uma lida nesse link abaixo que você vai encontrar umas coisas interessantes,
a mais interessante é porque usar o BigDecimal ao invés do Double. O BigDecimal
é muito mais preciso, da uma olhada ai que o assunto é bacana.

Essa afirmação está errada. De maneira geral, é preferível usar doubles e não floats.
Os cálculos com double, além de menos imprecisos, costumam a ser mais velozes do que os cálculos com floats, pois os processadores são otimizados para isso.

A única exceção é se sua aplicação usar muitos (e por muitos, entenda milhões) de doubles, e essa decisão realmente representar megabytes de informação adicional.
Como é o caso de trabalhar com computação gráfica, por exemplo.

Na dúvida, continue usando double.

Primeiro de tudo, não se engane. Números, quando representados em binário, são naturalmente imprecisos. Alguns valores, como 0,3 se transformam em dízimas periódicas e, como cada variável tem uma quantidade finita de bits, você terá perdas de precisão.
Além disso, lembre-se que se você multiplicar um número impreciso, estará também multiplicando o erro de sua imprecisão. Da mesma forma, se você soma uma série de números imprecisos, estará somando sua imprecisão.

Por isso, apesar de parecer muito precisos, os floats não são. Em pouco tempo você começa a perceber os resultados da imprecisão, se não fizer os cálculos com cuidado.

Aplicações do dia-a-dia, como geração de relatórios com estatística.
De maneira geral, você deveria usar sempre double e não float.

E tomar cuidado especial com valores monetários, usando tipos como BigDecimal, que lidam com imprecisão de maneira diferente.

Primeiro de tudo, não se engane. Números, quando representados em binário, são naturalmente imprecisos. Alguns valores, como 0,3 se transformam em dízimas periódicas e, como cada variável tem uma quantidade finita de bits, você terá perdas de precisão.
Além disso, lembre-se que se você multiplicar um número impreciso, estará também multiplicando o erro de sua imprecisão. Da mesma forma, se você soma uma série de números imprecisos, estará somando sua imprecisão.

Por isso, apesar de parecer muito precisos, os floats não são. Em pouco tempo você começa a perceber os resultados da imprecisão, se não fizer os cálculos com cuidado.

Aplicações do dia-a-dia, como geração de relatórios com estatística.
De maneira geral, você deveria usar sempre double e não float.

E tomar cuidado especial com valores monetários, usando tipos como BigDecimal, que lidam com imprecisão de maneira diferente.[/quote]

Aaaa, ok ! Valeu pela ajuda :slight_smile:
Vou continuar usando double então.

[quote=Scobar20] magodasabedoria
Da uma lida nesse link abaixo que você vai encontrar umas coisas interessantes,
a mais interessante é porque usar o BigDecimal ao invés do Double. O BigDecimal
é muito mais preciso, da uma olhada ai que o assunto é bacana.
http://blog.caelum.com.br/arredondamento-no-java-do-double-ao-bigdecimal/[/quote]

Beleza, vou dar uma lida ! Obrigado por ajudar :slight_smile: