Différence entre Float et Double - Lequel devrais-je utiliser?

(Remarque: cet article suppose que les lecteurs connaissent les bases de l'informatique)

De nombreux programmeurs / étudiants débutants inscrits en informatique posent les questions fréquemment posées qui concernent le domaine particulier de l'informatique qu'ils étudient. La plupart des cours pour débutants commencent par les thèmes du système de numérotation utilisé dans les ordinateurs modernes, y compris la binaire, décimal, octal et hexadécimal système. Ce sont les formats de numéro d'ordinateur qui sont les représentations internes des valeurs numériques dans les ordinateurs (ou les calculatrices et tout autre type d'ordinateurs numériques). Ces valeurs sont stockées en tant que "groupement de bits".

Comme nous le savons, les ordinateurs représentent des données sous forme d’ensembles de chiffres binaires (c’est-à-dire, dans la combinaison de 1s et 0s, tel que, 1111 représente 15 Dans le système décimal), il est judicieux d’expliquer les différents formats de nombres utilisés pour représenter une plage dynamique de valeurs, car ils constituent les blocs de base du calcul / traitement des nombres dans tout type d’opération. Une fois que le système de numérotation est défini dans la classe (souvent de manière médiocre), les étudiants sont tentés de passer à différents formats de numérotation dans le même type (c.-à-d.., arithmétique en virgule flottante) qui ont une certaine précision et une plage de nombres. Ainsi, ils sont obligés d'apprendre les nuances entre certains types. Deux des types de données les plus couramment utilisés sont Flotte et Double, et bien qu’ils ciblent les mêmes besoins (c’est-à-dire., arithmétique en virgule flottante), leur représentation interne et leur effet général sur le calcul du programme sont assez différents. Il est regrettable que de nombreux programmeurs passent à côté des nuances entre les types de données Flat et Double et finissent par en abuser dans des endroits où ils ne devraient pas être utilisés. Entraînant finalement des erreurs de calcul dans d'autres parties du programme.

Dans cet article, je vais vous expliquer la différence entre float et double avec les exemples de code en langage de programmation C. Commençons!

Float vs Double… Quel est le problème?

Float et Double sont les représentations de données utilisées pour les opérations arithmétiques à virgule flottante. Pensez aux nombres décimaux que vous calculez dans la classe de mathématiques, tels que, 20.123, 16,23, 10.2, etc., ce ne sont pas des nombres entiers (c.-à-d.., 2, 5, 15, etc.), ils nécessitent donc la prise en compte de fractions dans le binaire. En tant que nombres décimaux résultants (c.-à-d.., 20.123, 16,23, etc.) ne peut pas être facilement représenté avec un format binaire normal (c'est-à-dire, Integer). La différence principale entre Float et Double réside dans le fait que le premier correspond aux données à virgule flottante simple précision (32 bits), tandis que le dernier correspond au type de données à virgule flottante double précision (64 bits). Double s'appelle «double» car il s'agit essentiellement d'une version double précision de Float. Si vous calculez une quantité énorme (pensez aux milliers de 0 dans le nombre), alors les inexactitudes seront plus petites dans le Double et vous ne perdrez pas beaucoup de précision..

Il vaut mieux élaborer à l'aide des exemples de code. Voici l'opération sur Float et Double via les fonctions mathématiques fournies en langage C:

#comprendre

int main()

float num1 = 1.f / 82;

float num2 = 0;

pour (int i = 0; i < 738; ++i)

num2 + = num1;

printf (“% 7g \ n”, num2);

double num3 = 1,0 / 82;

double num4 = 0;

pour (int i = 0; i < 738; ++i)

num4 + = num3;

printf (“%. 15g \ n”, num4);

getchar ();

Il imprime ce qui suit:

9.000031

8.99999999999983

Ici, vous pouvez voir que la légère différence dans la précision de Float et Double donne une réponse tout à fait différente, bien que Double semble être plus précis que Float..

Voici l'exemple de la fonction sqrt () en C:

#comprendre

#comprendre

int main()

float num1 = sqrt (2382719676512365.1230112312312312);

double num2 = sqrt (2382719676512365.1230112312312312);

printf (“% f \ n”, num1);

printf (“% f \ n”, num2);

getchar ();

Il donne la sortie suivante:

48813108.000000

48813109.678778

Ici, vous pouvez voir que la réponse dans Double a une meilleure précision.

Globalement, il est préférable d’utiliser Double pour l’arithmétique à virgule flottante, car plusieurs fonctions mathématiques standard en C fonctionnent sur des ordinateurs doubles et les ordinateurs modernes sont extrêmement rapides et efficaces pour les calculs à double virgule flottante. Cela réduit le besoin d'utiliser Float, sauf si vous devez utiliser plusieurs nombres à virgule flottante (pensez aux grands tableaux contenant des milliers de 0) ou si vous utilisez un système qui ne prend pas en charge les doublons. virgule flottante de précision, car de nombreux GPU, périphériques de faible puissance et certaines plates-formes (ARM Cortex-M2, Cortex-M4, etc.) ne prennent pas encore Double en charge, vous devez donc utiliser Float. De plus, une chose à garder à l'esprit est que certains GPU / CPU fonctionnent mieux / efficacement dans le traitement Float, comme dans le calcul de vecteurs / matrice, de sorte que vous devrez peut-être consulter le manuel / la documentation de spécifications du matériel pour mieux choisir celui que vous utiliserez. pour une machine particulière.

Il y a rarement une raison d'utiliser Float au lieu de Double dans le code ciblant les ordinateurs modernes. La précision supplémentaire de Double réduit, mais n'élimine pas, le risque d'erreur d'arrondi ou autre imprécision pouvant entraîner des problèmes dans d'autres parties du programme. De nombreuses fonctions mathématiques ou opérateurs convertissent et renvoient Double, vous n'avez donc pas besoin de renvoyer les nombres dans Float, cela risquerait de perdre de la précision. Pour une analyse détaillée de l'arithmétique en virgule flottante, je vous recommande fortement de lire cet article génial (http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html).

Résumé

Alors… en quelques mots:

Endroits où vous devriez utiliser Float:

  • Si vous ciblez du matériel où la simple précision est plus rapide que la double précision.
  • Votre application utilise beaucoup l'arithmétique en virgule flottante, telle que des milliers de nombres avec des milliers de 0.
  • Vous faites une optimisation de très bas niveau. Par exemple, vous utilisez des instructions spéciales du processeur (SSE, SSE2, AVX, etc.) s’appliquant simultanément à plusieurs nombres / tableaux / vecteurs..

Conclusion

Dans cet article, j'ai souligné la différence entre Float et Double, et celle qui devrait être utilisée à des endroits spécifiques. On peut dire qu'il vaut mieux utiliser Double dans la plupart des endroits à l'aveuglette, en particulier si vous ciblez des ordinateurs modernes, car les chances d'une faible efficacité due à l'utilisation de l'arithmétique en virgule flottante double sont très peu probables. Si vous avez des questions, vous pouvez les poser dans la section commentaires ci-dessous.!