Différence entre flotteur et double - lequel devrais-je utiliser?

Différence entre flotteur et double - lequel devrais-je utiliser?

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

De nombreux programmeurs / étudiants / étudiants qui sont inscrits en informatique posent des questions fréquemment posées qui sont pertinentes pour le domaine particulier de l'informatique qu'ils étudient. La plupart des cours débutants commencent par les sujets du système numérique utilisé dans les ordinateurs modernes, y compris le 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 comme «groupement de bits».

Comme nous le savons, les ordinateurs représentent des données dans des ensembles de chiffres binaires (i.e., dans la combinaison de 1 et 0, tel que, 1111 représente 15 Dans le système décimal), il est logique d'enseigner les différents formats de nombres qui sont utilisés pour représenter une gamme dynamique de valeurs, car ils constituent les blocs de base du traitement de calcul / nombre dans tout type d'opération. Une fois le système numérique défini en classe (souvent mal), les élèves sont tentés de passer aux différents formats de nombres dans le même type (i.e., arithmétique à 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 Flotter et Double, Et bien qu'ils ciblent les mêmes besoins (je.e., arithmétique à virgule flottante), il y a une certaine différence dans leur représentation interne et leur effet global sur le calcul du programme. Il est regrettable que de nombreux programmeurs manquent les nuances entre les types de données plates et doubles et finissent par les utiliser dans des endroits où ils ne devraient pas être utilisés en premier lieu. Entraînant finalement des erreurs de calcul dans d'autres parties du programme.

Dans cet article, je vais vous faire la différence entre Float et Double avec les exemples de code dans le langage de programmation C. Commençons!

Float vs double… quelle est l'accord?

Float et Double sont la représentation des données qui sont 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, dix.2, etc., Ce ne sont pas des nombres entiers (je.e., 2, 5, 15, etc.), ils nécessitent donc la prise en compte des fractions dans le binaire. Comme les chiffres décimaux résultants (je.e., 20.123, 16.23, etc.) ne peut pas être facilement représenté avec un format binaire normal (i.e., Entier). La principale différence entre le flotteur et le double est que le premier est les données de point flottantes à une seule précision (32 bits), tandis que la seconde est le type de données de points flottants à double précision (64 bits). Le double est appelé «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 développer l'utilisation des exemples de code. Ce qui suit est l'opération sur Float et Double à travers les fonctions mathématiques fournies dans le langage C:

#inclure

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 du flotteur et du double donne une réponse complètement différente, bien que le double semble être plus précis que le flotteur.

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

#inclure

#inclure

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 en double a une meilleure précision.

Dans l'ensemble, il est préférable d'utiliser le double pour l'arithmétique à virgule flottante, car plusieurs fonctions mathématiques standard en C fonctionnent sur des ordinateurs doubles et modernes. Cela conduit à réduire la nécessité d'utiliser Float, à moins que vous ne deviez fonctionner sur de nombreux numéros à virgule flottante (pensez à de grands tableaux avec des milliers de 0 dans les chiffres) ou vous fonctionnez sur un système qui ne prend pas en charge le double- Point flottant de précision, autant de GPU, de dispositifs de faible puissance et de certaines plates-formes (ARM Cortex-M2, Cortex-M4, etc.) ne supporte pas encore le double, alors vous devriez utiliser Float. De plus, une chose à retenir est que certains GPU / CPU fonctionnent mieux / efficace dans le traitement du flotteur, comme dans le calcul des vecteurs / matrice, vous devrez donc peut-être consulter le manuel / documentation de spécification matérielle pour mieux décider lequel vous devez utiliser 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 en double réduit, mais n'élimine pas, les chances d'arrondi des erreurs ou d'autres imprécision qui peuvent causer des problèmes dans d'autres parties du programme. De nombreuses fonctions mathématiques ou opérateurs convertissent et retournent en double, vous n'avez donc pas besoin de rejeter les chiffres pour flotter, car cela pourrait perdre la précision. Pour une analyse détaillée sur l'arithmétique à 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 un mot:

Endroits où vous devez utiliser le flotteur:

  • Si vous ciblez du matériel où une seule précision est plus rapide que la double précision.
  • Votre application utilise une forte utilisation de l'arithmétique à virgule flottante, comme des milliers de nombres avec des milliers de 0.
  • Vous faites une optimisation de niveau très bas. Par exemple, vous utilisez des instructions spéciales CPU (I.e., SSE, SSE2, AVX, etc.) qui fonctionnent sur plusieurs nombres / tableaux / vecteurs à la fois.

Conclusion

Dans cet article, j'ai mis en évidence la différence entre le flotteur et le double, et lequel doit être utilisé dans des endroits spécifiques. Sans doute, il est préférable d'utiliser le double dans la plupart des endroits aveuglément, surtout si vous ciblez les ordinateurs modernes, car les chances de faible efficacité en raison de l'utilisation de l'arithmétique à virgule flottante double sont très peu probables. Si vous avez des questions, vous pouvez demander dans la section des commentaires ci-dessous!