I'li sobre a diferença entre precisão dupla e precisão simples. Entretanto, na maioria dos casos, float
e double
parecem ser intercambiáveis, ou seja, utilizar um ou outro não parece afetar os resultados. É este realmente o caso? Quando é que os flutuadores e as duplas são intercambiáveis? Quais são as diferenças entre elas?
Aqui está o que dizem as normas C99 (ISO-IEC 9899 6.2.5 §10) ou C++2003 (ISO-IEC 14882-2003 3.1.9 §8):
Existem três tipos de pontos flutuantes: "flutuante", "duplo", e "duplo longo". O tipo "duplo" fornece pelo menos tanta precisão quanto o tipo "flutuante", e o tipo "duplo longo" fornece pelo menos tanta precisão quanto o tipo "duplo". O conjunto de valores do tipo
float
é um subconjunto do conjunto de valores do tipodouble
; o conjunto de valores do tipodouble
é um subconjunto do conjunto de valores do tipolong double
.
O padrão C++ acrescenta:
A representação de valor dos tipos de ponto flutuante é definida pela implementação.
Eu sugeriria dar uma olhada no excelente What Every Computer Scientist Should Know About Floating-Point Arithmetic que cobre o padrão de ponto flutuante IEEE em profundidade. Você'vai aprender sobre os detalhes da representação e você'vai perceber que existe um tradeoff entre magnitude e precisão. A precisão da representação do ponto flutuante aumenta à medida que a magnitude diminui, portanto os números de ponto flutuante entre -1 e 1 são aqueles com maior precisão.
Os flutuadores têm menos precisão do que os duplos. Embora você já saiba, leia O que devemos saber sobre a Aritmética de Pontos Flutuantes para uma melhor compreensão.