J'ai lu des articles sur la différence entre la double précision et la simple précision. Cependant, dans la plupart des cas, float
et double
semblent être interchangeables, c'est-à-dire que l'utilisation de l'un ou l'autre ne semble pas affecter les résultats. Est-ce vraiment le cas ? Quand les flottants et les doubles sont-ils interchangeables ? Quelles sont les différences entre eux ?
Voici ce que disent les normes C99 (ISO-IEC 9899 6.2.5 §10) ou C++2003 (ISO-IEC 14882-2003 3.1.9 §8) :
Il existe trois types de virgule flottante :
float
,double
, etlong double
. Le typedouble
offre au moins autant de précision quefloat
, et le typelong double
offre au moins autant de précision quedouble
. L'ensemble des valeurs du typefloat
est un sous-ensemble de l'ensemble des valeurs du typedouble
; l'ensemble des valeurs du typedouble
est un sous-ensemble de l'ensemble des valeurs du typelong double
.
La norme C++ ajoute :
La représentation des valeurs des types à virgule flottante est définie par l'implémentation.
Je vous suggère de jeter un coup d'œil à l'excellent ouvrage [What Every Computer Scientist Should Know About Floating-Point Arithmetic][1] qui traite en profondeur de la norme IEEE sur la virgule flottante. Vous y découvrirez les détails de la représentation et vous vous rendrez compte qu'il existe un compromis entre la magnitude et la précision. La précision de la représentation en virgule flottante augmente au fur et à mesure que la magnitude diminue, c'est pourquoi les nombres en virgule flottante compris entre -1 et 1 sont ceux qui ont le plus de précision.
Les flottants ont moins de précision que les doubles. Bien que vous le sachiez déjà, lisez [ What WE Should Know About Floating-Point Arithmetic][1] pour mieux comprendre.