Nombres dénormalisés - IEEE 754 Floating Point
Donc je vais essayer d'en savoir plus sur les nombres Dénormalisés tel que défini dans la norme IEEE 754 la norme pour les nombres en virgule Flottante. J'ai déjà lu plusieurs articles grâce à des résultats de recherche Google, et j'ai traversé plusieurs StackOverFlow postes. Cependant j'ai encore quelques questions sans réponse.
Tout d'abord, juste pour revoir ma compréhension de ce qu'est un Dénormalisée float:
Les nombres qui ont moins de bits de précision, et sont plus petites (en
grandeur) que les nombres normalisés
Essentiellement, un dénormalisée flotteur a la capacité de représenter le plus PETIT (en amplitude) numéro qui est possible d'être représenté à toute valeur à virgule flottante.
Que c'est correct? Rien de plus que cela?
J'ai lu que:
en utilisant les nombres dénormalisés est livré avec un coût de performances sur de nombreux
les plates-formes
Des commentaires sur cette question?
J'ai aussi lu dans un des articles que
il faut "éviter les chevauchements entre normalisé et les nombres dénormalisés"
Des commentaires sur cette question?
Dans certaines présentations de la norme IEEE, lors de la virgule flottante gammes sont présentées les dénormalisée valeurs sont exclus et les tables sont étiquetés comme "un moyen efficace de gamme", presque comme si le présentateur est de penser que "Nous savons que les nombres dénormalisés PEUT représenter le plus possible des valeurs à virgule flottante, mais à cause de certains inconvénients de les nombres dénormalisés, nous avons choisi de les exclure de plages qui permettra de mieux l'adapter à l'utilisation commune des scénarios", Comme si les nombres dénormalisés ne sont pas couramment utilisés.
Je suppose que j'ai juste l'impression qu'en utilisant les nombres dénormalisés s'avère ne pas être une bonne chose dans la plupart des cas?
Si j'avais à répondre à cette question sur mon propre j'ai envie de penser que:
En utilisant les nombres dénormalisés est bien parce que vous pouvez représenter le plus petit (en amplitude) nombre possible, aussi longtemps Que la précision n'est pas importante, et vous n'avez pas les mélanger avec les nombres normalisés, ET les performances de l'application s'inscrit dans les exigences.
En utilisant les nombres dénormalisés est une mauvaise chose parce que la plupart des applications ne nécessitent pas de représentations sorte de petit -- La perte de précision est préjudiciable, et vous pouvez tirer dans le pied trop facilement par le mélange avec les nombres normalisés, ET les performances ne vaut pas le coût dans la plupart des cas.
Des commentaires sur ces deux réponses? Quoi d'autre pourrais-je manquer ou de ne pas comprendre les nombres dénormalisés?
source d'informationauteur dtmland
Vous devez vous connecter pour publier un commentaire.
Qui est correct.
La sanction est différente sur des processeurs différents, mais il peut être jusqu'à 2 ordres de grandeur. La raison? La même que pour ces conseils:
Voici la clé: denormals sont un point fixe "micro-format" au sein de l'IEEE-754 à virgule flottante au format. Dans un nombre normal, l'exposant indique la position de la binaire point. Tout nombre dénormalisé contenant les dernières 52 bits dans la notation à virgule fixe avec un exposant de 2-1074 pour les doubles.
Donc, denormals sont lents parce qu'ils nécessitent un traitement spécial. Dans la pratique, cela se produit très rarement, et chip décideurs n'aime pas passer trop de ressources précieuses dans de rares cas.
Mélange denormals avec les normales est lent parce que vous êtes mélange de formats et vous avez l'étape supplémentaire de la conversion entre les deux.
Denormals ont été créés dans un seul but: progressive underflow. C'est une façon de garder la différence relative entre les minuscules nombre de petits. Si vous allez directement à partir du plus petit nombre normal à zéro (brusque underflow), la variation relative est infini. Si vous allez à denormals sur dépassement de capacité, la variation relative est toujours pas tout à fait exact, mais au moins plus raisonnable. Et cette différence se montre dans les calculs.
De mettre une manière différente. Les nombres à virgule flottante ne sont pas répartis de manière uniforme. Il y a toujours le même nombre de chiffres entre les puissances successives de deux: 252 (pour la double précision). Sans denormals, vous vous retrouvez toujours avec un intervalle entre 0 et le plus petit nombre à virgule flottante qui est de 252 fois la taille de la différence entre le plus petit des deux nombres. Denormals combler cette lacune de façon uniforme.
Comme un exemple sur les effets des brusques vs progressive de dépassement de capacité, regardez les mathématiquement équivalente
x == y
etx - y == 0
. Six
ety
sont minuscules mais différentes et que vous utilisez brusque dépassement de capacité, alors si leur différence est moins que le minimum de la valeur de coupure, leur différence sera de zéro, et donc l'équivalence est violé.Progressive dépassement de capacité, la différence entre les deux minuscules mais différent du nombre normal d'être un des nombres dénormalisés, ce qui n'est pas zéro. L'équivalence est préservée.
Donc, à l'aide de denormals sur le but n'est pas conseillé, car ils ont été conçus uniquement comme un mécanisme de sauvegarde dans des cas exceptionnels.