IEEE 754-1985
La norme d'IEEE de pour l'arithmétique à point mobile binaire ( IEEE 754 ) est la norme la plus employée couramment pour le calcul à point mobile du , et est suivie des beaucoup l'unité centrale de traitement et les réalisations du FPU . La norme définit des formats pour représenter des nombres à point mobile (négatif y compris zéro et nombres de Denormal de et valeurs spéciales (infinis et NaNs ainsi qu'un ensemble d'opérations à point mobile de qui opèrent ces valeurs. Elle spécifie également quatre modes d'arrondi et cinq exceptions (comprenant quand les exceptions se produisent, et ce qui se produit quand elles se produisent).
IEEE 754 spécifie quatre formats pour représenter des valeurs à point mobile : précision à double précision (64-bit) et simple-prolongée de simple-précision (à 32 bits), (bit de ≥ 43, non utilisés généralement) et précision double-prolongée (bit de ≥ 79, habituellement mis en application avec 80 bits). Seulement des valeurs à 32 bits sont exigées par la norme ; les autres sont facultatifs. Beaucoup de langues spécifient que des formats et l'arithmétique d'IEEE soient mis en application, bien que parfois elle soit facultative. Par exemple, le langage de programmation du C , qui a antidaté IEEE 754, maintenant permet mais n'exige pas l'arithmétique d'IEEE (le C float typiquement est employé pour la simple-précision d'IEEE et double emploie IEEE à double précision).
Le plein titre de la norme est norme d'IEEE de pour l'arithmétique à point mobile binaire (ANSI/IEEE DST 754-1985) , et on le connaît également en tant que 60559:1989 du CEI de , arithmétique à point mobile binaire pour les systèmes de microprocesseur (à l'origine le numéro de référence était 559:1989 du CEI). Il y avait plus tard un IEEE 854-1987 pour le " ; " indépendant de virgule flottante de base ; tant que la radix est 2 ou 10.
Anatomie d'un nombre à point mobile
Être suit une description du format standard pour des nombres à point mobile.
Conventions de peu utilisées en cet article
Le peu dans un mot de la largeur W est indexé par les nombres entiers dans la gamme 0 à W&minus ; 1 inclus. Le peu avec l'index 0 est dessiné du côté droit. Le plus bas peu répertorié est habituellement le lsb (moindre peu significatif, celui qui si changé causerait la plus petite variation de la valeur représentée).
Disposition générale
Des nombres à point mobile binaires sont stockés sous une forme de la signe-grandeur où le la plupart de peu significatif est le peu de signe , l'exposant de est par l'exposant de partial ", et de ; fraction" ; est le Significand sans le la plupart de peu significatif .
Polariser d'exposant
L'exposant est polarisé par 2 le e −1−1. Voir également l'excès '' N '' . Polariser est fait parce que les exposants doivent être les valeurs signées par afin de pouvoir représenter des valeurs minuscules et énormes, mais le complément , la représentation habituelle du deux pour des valeurs signées, rendrait la comparaison plus dure. Pour résoudre ceci l'exposant est décentré avant d'être stocké, en ajustant sa valeur pour la mettre dans une marge non signée appropriée à la comparaison.
Par exemple, pour représenter un nombre qui a l'exposant de 17, l'exposant de est 17 + 2 le arrogant e du e −1−1. = 8, l'exposant est égal 17 + 128 au − 1 = 144.
Cas
Le peu le plus significatif du Significand (non stocké) est déterminé par la valeur de l'exposant de . Si le de l'exposant , le peu le plus significatif du significand de est 1, et le nombre serait normalisé par . Si l'exposant de est 0, le peu le plus significatif du significand de est 0 et le nombre serait le De-normal. Trois cas spéciaux se présentent : si l'exposant de est 0 et la fraction de est 0, le nombre est (selon le peu de signe) le
Ceci peut être récapitulé comme :
bit de la Simple-précision 32
Un nombre à point mobile binaire de la simple-précision est stocké dans 32 bits
L'exposant est polarisé par dans ce cas-ci (des exposants dans le &minus de gamme ; 126 à +127 sont représentables. Voir l'explication ci-dessus pour comprendre pourquoi polariser est fait). Un exposant de &minus ; 127 seraient polarisés à la valeur 0 mais ceci est réservé pour coder que la valeur est un nombre ou un zéro denormalized. Un exposant de 128 serait polarisé à la valeur 255 mais ceci n'est réservé pour coder un infini ou pas un nombre (NaN). Voir le diagramme ci-dessus.
Pour des nombres normalisés, le plus commun, l'exposant de est l'exposant décentré et la fraction de est le Significand sans le peu le plus significatif.
Le nombre a la valeur v :
v = × de s ; × 2e ; m
Là où
s = +1 (nombres positifs) quand le peu de signe est 0
s = &minus ; 1 (nombres négatifs) quand le peu de signe est 1
e = &minus d'Exp ; 127 (en d'autres termes l'exposant est stocké avec 127 additionnés à lui, également appelé " ; partial avec 127" ;)
m = 1.fraction dans la binaire (c'est-à-dire, le significand est le nombre binaire 1 suivi de l'emplacement de la virgule suivi du peu binaire de la fraction). Par conséquent, 1 ≤ m < 2.
Dans l'exemple montré ci-dessus, le signe est zéro, l'exposant est &minus ; 3, et le significand est 1.01 (dans la binaire, qui est 1.25 dans la décimale). Le nombre représenté est donc +1.25 × ; 2&minus ; 3, qui est +0.
Notes : Les nombres de Denormalized sont les mêmes sauf qu'e = &minus ; 126 et m est 0. (e n'est pas &minus ; 127 : La fraction doit être décalée vers la droite par un plus de bit, afin d'inclure le principal peu, qui n'est pas toujours 1 dans ce cas-ci. Ceci est équilibré en incrémentant l'exposant au &minus ; 126 pour le
Voici le tableau synoptique de la section précédente avec quelques exemples à 32 bits de simple-précision d'exemple :
Un exemple plus complexe
Codons le &minus de nombre décimal ; 118.625 using le système d'IEEE 754.
d'abord que nous devons obtenir le signe, l'exposant et la fraction. Puisque c'est un nombre négatif, le signe est " ; 1" ;.
< ! --La polarisation est +127 - je ne sais pas où mettre cela maintenant-->
Bit 64 à double précision < ! -- Cette section est liée des algorithmes de pour le désaccord calculateur -->
Le à double précision est essentiellement identique sauf que les champs sont plus larges :La pièce de fraction est beaucoup plus grande, alors que l'exposant est seulement légèrement plus grand. Les créateurs standard ont cru que la précision est plus importante que la gamme.
NaNs et infinis sont représentés avec l'Exp étant tout le 1s (2047). Si la pièce de fraction est chacun des zéro puis c'est infini, d'autre il est NaN.
Pour des nombres normaux la polarisation d'exposant est +1023 (ainsi e est l'exposant (&minus ; 1023)). Pour des nombres de Denormalized l'exposant est (&minus ; 1022) (l'exposant minimum pour un number&mdash normal ; il n'est pas (&minus ; 1023) parce que les nombres normalisés ont un 1 chiffre principal avant la virgule binaire et les nombres denormalized ne font pas). Comme avant, l'infini et zéro sont signés.
Notes : Les nombres positifs et négatifs les plus proches de zéro (représenté par la valeur denormalized avec tout le 0s dans le domaine d'Exp et la valeur 1 binaire dans le domaine de fraction) sont
Fonctions et attributs recommandés
Sous quelques compilateurs C, copysign (x, y) renvoie x avec le signe de y, ainsi ABS (x) égale le copysign (x, 1. C'est l'une des quelques opérations qui opère NaN dans une arithmétique de ressemblance de manière. Le copysign de fonction est nouveau dans la norme C99. &minus ; les retours X X avec le signe se sont inversés. C'est différent de 0&minus ; X dans certains cas, notamment quand x est 0. Ainsi &minus ; (0) est le &minus ; 0, mais le signe de 0&minus ; 0 dépend du mode d'arrondi.
scalb (y, N)
logb (x)
fini (x) un attribut pour le " ; X est un value" fini ; , équivalent au &minus ; FNI < x < FNI
isnan (x) un attribut pour le " ; X est un nan" ; , équivalent au " ; x" du ≠ X ;
X <> y qui s'avère avoir le comportement différent d'exception que PAS (x = y).
non commandé (x, y) est vrai quand " ; X est non commandé avec le y" ; , c.
classe (x)
nextafter (x, y) renvoie la prochaine valeur représentable de x dans la direction vers y
.
| Random links: | Liste de leaders d'État en 1760 | Tête de la navigation | Drapeau de Gadsden | Hé ce qui est erroné avec celui-ci ? | IEEE_754-1985 |