Simple vs Double les types de données
Sont t-il des situations où il serait plus judicieux d'utiliser un seul type de données au lieu d'un double? De mes recherches, le désavantage d'un double, c'est qu'il nécessite plus d'espace, ce qui n'est pas un problème pour la plupart des applications. Dans ce cas, si tous les nombres à virgule flottante être double?
Un peu d'info de base:
Je travaille avec une application qui traite d'un grand nombre de données sur les coordonnées et les produits chimiques. Quelques clients ont remarqué que lors de l'importation de feuilles de calcul de données, certaines valeurs avec une grande précision sont arrondis à la baisse de la précision d'un seul.
- "La plupart des" applications. Pourrait être un problème pour les systèmes embarqués, ou lorsque vous avez des millions de doubles.
- Ma règle de base est d'utiliser la double normalement, float (apparemment, votre seul) quand j'ai une bonne raison (comme en économisant de l'espace).
Vous devez vous connecter pour publier un commentaire.
Sur la plupart des applications de bureau, oui.
Si vous avez un large éventail d'entre eux, la réduction de moitié de la taille de celle-ci peut être suffisamment important pour être utile si vous n'avez pas besoin de la précision.
Surtout étant donné que pratiquement tous les bureaux disposent de double-precision floating-point arithmetic fait en hardware.
De cette .net de l'article
Comme Mark l'a dit dans son commentaire, l'espace peut être un problème sur la mémoire-systèmes soumis à des contraintes. Vous pouvez également l'index ou le tri d'une liste, et pourquoi le faire sur des doubles si vous pouvez stocker vos valeurs simples?
Sur certains matériels, d'arithmétique, impliquant des valeurs double peut prendre plus de temps que celle impliquant des valeurs individuelles, mais la plupart des dernières Unités ont un seul type de données natif (par exemple, 80 bits étendue des valeurs à virgule flottante pour les architectures x86) qui sera utilisé en interne pour les calculs, indépendamment de ce qu'en mémoire de type de données que vous utilisez. Donc, c'est-à-dire que "la FPU, les calculs seront plus vite avec précision unique" est généralement pas une raison pour l'utiliser en simple précision sur la plupart du matériel moderne d'aujourd'hui.
Cela dit, en plus de la "utilise moins de mémoire" les raisons développées dans les autres réponses, il y a une raison très pratique quand il s'agit de SIMD vecteur instructions SSE et AltiVec simple précision est likey à être deux fois plus rapide que la double précision, étant donné que les instructions fonctionner sur des vecteurs de taille fixe, et vous pouvez farcir deux fois plus nombreux sont les valeurs de précision dans un seul vecteur, avec le temps de traitement généralement en restant le même.
Par exemple, avec un cryptage de 128 bits vecteur unité capable de traiter vecteur de multiplications à 2 cycles d'horloge, vous pourriez obtenir un débit de 2 simple précision multiplications par cycle d'horloge, contre 1 double précision, étant donné que vous pouvez 4 singles dans un vecteur, et deux doubles.
Un effet similaire se produit avec une bande passante de la mémoire, et n'est pas spécifique à vecteur de traitement - si vous avez de grands tableaux de doubles, ils ne seront pas seulement prendre deux fois l'espace, mais peut prendre jusqu'à deux fois plus long dans le cas que votre algorithme est bande passante limitée (qui est de plus en plus probable compte tenu de l'augmentation de tailles et de diminuer les latences de vecteur d'unités de traitement).
Doubles prendre plus d'espace, mais l'une précision supplémentaire peut ou peut ne pas être nécessaire. J'ai fait beaucoup de programmation dans le monde scientifique où l'arithmétique à virgule flottante est très commun et ont remarqué que, souvent, vous pouvez faire les calculs en double ou plus de précision, mais de stocker les résultats que les célibataires sans mauvais effet.
Garder à l'esprit qu'une fois que les nombres sont aspirés dans le FPU, elles se sont élargies à de très haute précision, de toute façon. Cela étant dit, il serait préférable d'essayer ce que vous faites à la fois de précisions et de voir si les résultats sont comparables.
Malheureusement, l'informatique est encore une science expérimentale.
Si vous codez OpenGL alors il est normal d'utiliser des GLSingle (eg unique) plutôt que de GLDouble. Dans presque tous les cas de simple précision est plus que suffisant pour la plupart des applications graphiques et devrait être plus rapide, bien que j'avoue que je ne suis pas certain de ce sur la dernière génération de Gpu.
Mon préféré citation sur c'est que seule la précision est suffisante pour naviguer jusqu'à la lune et retour, donc, dans la pratique, il est rare de provoquer un réel problème. Cela dit, dans la plupart des circonstances que j'aimerai atteindre un double de nos jours que le stockage n'est pas cher et il y a moins de chances d'être tout bizarre binaire à décimal questions.