Dans mon expérience en programmation, je dois souvent décider si je dois utiliser des nombres flottants ou doubles pour mes nombres réels. Parfois, je privilégie le double, parfois le double, mais cela semble plus subjectif. Si je devais être confronté pour défendre ma décision, je ne donnerais probablement pas de bonnes raisons.
Quand utilisez-vous float et quand utilisez-vous double? Utilisez-vous toujours double, uniquement lorsque des contraintes de mémoire sont présentes, vous optez pour float? Ou utilisez-vous toujours float, sauf si l'exigence de précision vous oblige à utiliser double? Existe-t-il des différences substantielles en ce qui concerne la complexité de calcul des arithémétiques de base entre float et double? Quels sont les avantages et les inconvénients de l'utilisation de float ou double? Et avez-vous même utilisé long double?
la source
Réponses:
Le choix par défaut pour un type à virgule flottante devrait être
double
. Ceci est aussi le type que vous obtenez avec littéraux à virgule flottante sans suffixe ou (en C) des fonctions standard qui fonctionnent sur les nombres à virgule flottante (par exempleexp
,sin
etc.).float
ne doit être utilisé que si vous devez utiliser un grand nombre de nombres à virgule flottante (de l'ordre de milliers ou plus) et si l'analyse de l'algorithme a montré que la portée réduite et la précision ne posaient pas de problème.long double
peut être utilisé si vous avez besoin d'une portée ou d'une précision supérieures àdouble
, et si cela est prévu sur votre plate-forme cible.En résumé,
float
etlong double
doit être réservé à l'usage des spécialistes, avecdouble
une utilisation "au quotidien".la source
float
(et parfois une demi-précision) car ni l’œil humain, ni l’affichage, ni le système de couleur n’ont autant de précision. . Ce conseil s’applique par exemple à OpenGL, etc. Ce conseil supplémentaire ne s’applique pas aux images médicales, qui ont des exigences de précision plus strictes.Il y a rarement lieu d'utiliser float au lieu de doubler dans le code ciblant les ordinateurs modernes. La précision supplémentaire réduit (mais n'élimine pas) le risque d'erreur d'arrondi ou autre imprécision causant des problèmes.
Les principales raisons pour lesquelles je peux penser à utiliser float sont:
Donc, en gros, la solution est double sauf si vous avez des limitations matérielles ou si l'analyse n'a pas montré que le stockage de nombres en double précision contribue de manière significative à l'utilisation de la mémoire.
la source
Utilisez
double
pour tous vos calculs et variables temporaires. À utiliserfloat
lorsque vous devez gérer un tableau de nombresfloat[]
(si la précision est suffisante) et que vous avez affaire à des dizaines de milliers defloat
nombres.La plupart / la plupart des fonctions mathématiques ou des opérateurs convertissent / retournent
double
, et vous ne souhaitez pas rediffuser les numéros versfloat
pour des étapes intermédiaires.Par exemple, si vous avez saisi 100 000 nombres dans un fichier ou un flux et que vous devez les trier, mettez les nombres dans un
float[]
.la source
Certaines plates-formes (ARM Cortex-M2, Cortex-M4, etc.) ne prennent pas en charge double (cela peut toujours être vérifié dans le manuel de référence de votre processeur. S'il n'y a pas d'avertissement ou d'erreur de compilation, cela ne signifie pas que le code est optimal. double peut être imité.). C'est pourquoi vous devrez peut-être vous en tenir à int ou float .
Si ce n'est pas le cas, j'utiliserais le double .
Vous pouvez consulter le célèbre article de D. Goldberg ("Ce que tout informaticien devrait savoir sur l'arithmétique en virgule flottante"). Vous devriez réfléchir à deux fois avant d'utiliser l'arithmétique en virgule flottante. Il y a de grandes chances qu'ils ne soient pas du tout nécessaires dans votre situation particulière.
http://perso.ens-lyon.fr/jean-michel.muller/goldberg.pdf
la source
Pour les problèmes du monde réel, le seuil d'échantillonnage de vos données est important pour répondre à cette question. De même, le bruit de fond est également important. Si votre sélection de type de données dépasse l'un ou l'autre, la précision ne vous apportera aucun avantage.
La plupart des échantillonneurs du monde réel sont limités aux CNA 24 bits. Suggérer que 32 bits de précision sur des calculs du monde réel devrait convenir lorsque la signification est de 24 bits de précision.
La double précision coûte 2x la mémoire. Par conséquent, limiter l’utilisation de doublons par rapport aux flottants pourrait réduire considérablement l’empreinte mémoire / la bande passante des applications en cours d’exécution.
la source
Le choix de la variable à utiliser entre float et double dépend de la précision des données requises. Si une réponse doit avoir une différence négligeable par rapport à la réponse réelle, le nombre de décimales requises sera donc conséquent, ainsi le double sera utilisé. Float coupera certaines parties de la décimale, réduisant ainsi la précision.
la source
D'habitude, j'utilise le
float
type quand je n'ai pas besoin de beaucoup de précision - par exemple pour l'argent - ce qui est faux, mais c'est ce que j'ai l'habitude de faire.Par contre, j'utilise
double
quand j'ai besoin de plus de précision, par exemple pour des algorithmes mathématiques complexes.La norme C99 dit ceci:
Je n'ai jamais vraiment utilisé
long double
, mais je n'utilise pas beaucoup le C / C ++. D'habitude, j'utilise des langages à typage dynamique comme Python, dans lesquels vous n'avez pas à vous soucier des types.Pour plus d'informations sur Double vs Float , consultez cette question à l'adresse SO .
la source
Decimal
est un type à virgule flottante et constitue généralement un bon choix pour les calculs d'argent.