O tipo de dados flutuante é um ponto flutuante IEEE 754 de precisão única de 32 bits e o tipo de dados duplo é um ponto flutuante IEEE 754 de precisão dupla de 64 bits.
O que isso significa? E quando devo usar float em vez de duplo ou vice-versa?
O tipo de dados flutuante é um ponto flutuante IEEE 754 de precisão única de 32 bits e o tipo de dados duplo é um ponto flutuante IEEE 754 de precisão dupla de 64 bits.
O que isso significa? E quando devo usar float em vez de duplo ou vice-versa?
double
vez defloat
evitar um bug relacionado à precisão, vale a pena .Respostas:
A página da Wikipedia é um bom lugar para começar.
Resumindo:
float
é representado em 32 bits, com 1 bit de sinal, 8 bits de expoente e 23 bits do significando (ou o que se segue de um número de notação científica: 2.33728 * 10 12 ; 33728 é o significando).double
é representado em 64 bits, com 1 bit de sinal, 11 bits de expoente e 52 bits de significando.Por padrão, Java usa
double
para representar seus números de ponto flutuante (para que um literal3.14
seja digitadodouble
). Também é o tipo de dados que fornecerá um intervalo de números muito maior, por isso incentivaria fortemente seu usofloat
.Pode haver algumas bibliotecas que realmente forçar o uso de
float
, mas em geral - a menos que você pode garantir que seu resultado será suficientemente pequeno para caber emfloat
's gama prescrita , então é melhor optar comdouble
.Se você precisar de precisão - por exemplo, não poderá ter um valor decimal impreciso (como
1/10 + 2/10
) ou estiver fazendo algo com moeda (por exemplo, representando US $ 10,33 no sistema), use aBigDecimal
, que pode suportar uma quantidade arbitrária de precisão e lida com situações como essa de maneira elegante.fonte
*100
. Por favor, você tem um ponto aqui, mas você poderia ser mais preciso :)Um flutuador oferece aprox. Precisão de 6 a 7 dígitos decimais, enquanto um duplo fornece aprox. 15-16. Além disso, o intervalo de números é maior para o dobro.
Um duplo precisa de 8 bytes de espaço de armazenamento, enquanto um flutuador precisa de apenas 4 bytes.
fonte
Os números de ponto flutuante, também conhecidos como números reais, são usados ao avaliar expressões que requerem precisão fracionária. Por exemplo, cálculos como raiz quadrada ou transcendentais como seno e cosseno, resultam em um valor cuja precisão requer um tipo de ponto flutuante. Java implementa o conjunto padrão (IEEE-754) de tipos e operadores de ponto flutuante. Existem dois tipos de tipos de ponto flutuante, float e double, que representam números de precisão única e dupla, respectivamente. Sua largura e faixas são mostradas aqui:
flutuador
O tipo float especifica um valor de precisão única que usa 32 bits de armazenamento. A precisão única é mais rápida em alguns processadores e ocupa metade do espaço da precisão dupla, mas se tornará imprecisa quando os valores forem muito grandes ou muito pequenos. Variáveis do tipo float são úteis quando você precisa de um componente fracionário, mas não exige um alto grau de precisão.
Aqui estão alguns exemplos de declarações de variáveis flutuantes:
float hightemp, baixa temperatura;
Duplo
A precisão dupla, como indicado pela palavra-chave double, usa 64 bits para armazenar um valor. A precisão dupla é realmente mais rápida do que a precisão única em alguns processadores modernos que foram otimizados para cálculos matemáticos de alta velocidade. Todas as funções matemáticas transcendentais, como sin (), cos () e sqrt (), retornam valores duplos. Quando você precisa manter a precisão de muitos cálculos iterativos ou manipular números de grande valor, o dobro é a melhor opção.
fonte
float
nemdouble
são mais usados para moeda no Java, porque abrem a oportunidade para erros de arredondamento. Este artigo entra em mais detalhes: javapractices.com/topic/TopicAction.do?Id=13No entanto, o Java parece ter uma tendência a usar o dobro para cálculos:
Por exemplo, o programa que escrevi hoje, os métodos não funcionaram quando usei float, mas agora funcionam muito bem quando substituí o float por double (no NetBeans IDE):
fonte
Isso dará erro:
/MyClass.java:3: erro: tipos incompatíveis: possível conversão com perdas de double para float float a = 0,5;
Isso funcionará perfeitamente bem
Isso também funcionará perfeitamente bem
Razão : Java, por padrão, armazena números reais como o dobro para garantir maior precisão.
O Double ocupa mais espaço, mas é mais preciso durante o cálculo, e o float ocupa menos espaço, mas é menos preciso.
fonte
De acordo com os padrões IEEE, float é uma representação de 32 bits de um número real, enquanto double é uma representação de 64 bits.
Nos programas Java, normalmente vemos o uso do tipo de dados duplo. É apenas para evitar estouros, pois o intervalo de números que pode ser acomodado usando o tipo de dados duplo é mais do que o intervalo quando o float é usado.
Além disso, quando é necessária alta precisão, o uso da dupla é incentivado. Poucos métodos de biblioteca que foram implementados há muito tempo ainda exigem o uso do tipo de dados float como uma obrigação (isso é apenas porque foi implementado usando float, nada mais!).
Mas se você tiver certeza de que seu programa requer números pequenos e não ocorrer um estouro com o uso do float, o uso do float melhorará bastante a complexidade do seu espaço, pois os floats exigem metade da memória, conforme exigido pelo dobro.
fonte
Este exemplo ilustra como extrair o sinal (o bit mais à esquerda), o expoente (os 8 bits seguintes) e a mantissa (os 23 bits mais à direita) de um flutuador em Java.
A mesma abordagem pode ser usada para o dobro (expoente de 11 bits e mantissa de 52 bits).
Crédito: http://sj.github.io/java-float/
fonte
Você deve usar o dobro em vez de flutuar para cálculos precisos e flutuar em vez de dobrar ao usar cálculos menos precisos. Float contém apenas números decimais, mas double contém um número de ponto flutuante de precisão dupla IEEE754, facilitando a contenção e o cálculo de números com mais precisão. Espero que isto ajude.
fonte
Em cálculos regulares de programação, não usamos float. Se garantirmos que o intervalo de resultados esteja dentro do intervalo do tipo de dados flutuantes, poderemos escolher um tipo de dados flutuantes para economizar memória. Geralmente, usamos o dobro por duas razões: -
Os tipos de dados flutuante e duplo foram projetados especialmente para cálculos científicos, onde os erros de aproximação são aceitáveis. Se a precisão é a preocupação mais anterior, é recomendável usar a classe BigDecimal em vez de tipos de dados flutuantes ou duplos. Fonte: - Tipos de dados flutuantes e duplos em Java
fonte