Types de données SANE
Le SANE fournit trois types d'application (Single, Double et Comp) et le type arithmétique (Extended). Les valeurs à virgule flottante d'entreposage Single, Double et Extended, et Comp entrepose les valeurs intégrales.
Le type Extended est appelé type arithmétique car, pour rendre l'évaluation des expressions plus simple et plus précise, SANE effectue toutes les opérations arithmétiques avec une précision étendue et fournit des résultats arithmétiques au type Extended. Les types d'application Single, Double et Comp peuvent être considérés comme des types d'entreposage peu encombrants pour l'arithmétique à précision étendue. (Ce manuel utilise le terme précision étendue pour désigner à la fois la précision étendue et l'intervalle étendue du type Extended.)
La norme IEEE donne des spécifications exactes pour les types Single et Double, mais pour le type étendu, ne spécifie que des limites inférieures pour la précision et la plage des exposants. Les implémentations SANE prises en charge par la virgule flottante matérielle peuvent adopter le format étendu du matériel, pouvant différer du format 80 bits décrit ici. Vous devez entreposer les données externes dans l'un des types d'application plutôt que dans le type étendu, non seulement par souci d'économie mais aussi parce que le format étendu peut varier selon les différentes implémentations de l'arithmétique IEEE.
Toutes les valeurs représentables en Single, Double et Comp (ainsi que les entiers 16 bits et 32 bits) peuvent être représentées exactement en étendu. Ainsi, les valeurs peuvent être déplacées de n'importe lequel de ces types vers le type étendu et inversement sans aucune perte d'informations.
Choisir un type de données
Généralement, choisir un type de données nécessite que vous déterminiez les compromis entre :
- Format à virgule fixe ou virgule flottante
- Précision
- Intervalle
- Utilisation de la mémoire
- Vitesse
La précision, l'intervalle et l'utilisation de la mémoire pour chaque type de données SANE sont présentées dans un tableau plus loin. Les effets des types de données sur les performances (vitesse) sont différents pour différentes implémentations de SANE.
La plupart des applications de comptabilité nécessitent un type de comptage comptant les choses (penny, dollars, widgets) exactement. Les applications comptables peuvent être mises en oeuvre en représentant les valeurs monétaires sous forme de nombres entiers de cents ou de millier, pouvant être entreposés exactement dans le format d'entreposage de type Comp (pour calcul). La somme, la différence ou le produit de deux valeurs Comp est exact si l'amplitude du résultat ne dépasse pas 263-1 (c'est-à-dire 9 223 372 036 854 775 807). Ce nombre est supérieur à la dette nationale des États-Unis exprimée en milliards. De plus, les valeurs Comp (telles que les résultats des calculs comptables) peuvent être mélangées avec des valeurs étendues dans les calculs en virgule flottante (telles que les intérêts composés).
L'arithmétique avec des variables de type Comp, comme toute l'arithmétique SANE, est effectuée en interne à l'aide de l'arithmétique à précision étendue. Il n'y a pas de perte de précision, car la conversion de Comp à Extended est toujours exacte. L'espace peut être économisé en entreposant les nombres au format Comp, étant 20 % plus court que le format étendu 80 bits. Les applications non comptables seront normalement mieux servies par les formats de données à virgule flottante.
Remarque sur le langage : dans SANE Pascal et SANE C, les constantes à virgule flottante sont entreposées au format Extended.
Type SANE | Type Pascal |
---|---|
IEEE single | Real |
IEEE double | Double |
SANE comp | Comp |
IEEE extended | Extended |
Valeurs représentées
Les formats d'entreposage en virgule flottante (Single, Double et Extended) fournissent des codages binaires d'un signe (+ ou -), d'un exposant et d'un significand. Un nombre représenté vaut :
±significandx 2exponent |
où le significand a un seul bit à gauche du point binaire (c'est-à-dire 0 s; significand < 2).
Remarque : Cette définition s'applique aux nombres normalisés et dénormalisés.
Portée et précision des types SANE
Le tableau suivant décrit l'intervalle et la précision des types de données numériques pris en charge par SANE. Les intervalles décimales sont exprimées sous forme de représentations décimales à deux chiffres hachées des valeurs binaires exactes :
Types de données d'application | Type de données arithmétique | |||
---|---|---|---|---|
Single | Double | Comp | Extended | |
Taille (octets : blts) | 4:32 | 8:64 | 8:64 | 10:80 |
Intervalle d'exposants binaires Minimum Maximum |
-126 127 |
-1022 1023 |
-- -- |
-16383 16383 |
Signification et précision Bits Chiffres décimaux |
24 7-8 |
53 15-16 |
63 18-19 |
64 19-20 |
Intervalle décimale (approximative) Minimum négatif Norme négative maximale Dénormité négative maximale Dénormité positive minimale Norme positive minimale Positif maximal |
3.4E+38 1.2E-38 1.5E-45 -1.5E-45 -1.2E-38 -3.4E+38 |
1. 7E+308 2.3E-308 5.0E-324 -5.0E-324 -2.3E-308 -1.7E-4932 |
≈-9.2E18 ≈-9.2E18 |
1.1E+4932 1.7E-4932 1.9E-4951 -1.9E-4951 -1.7E+308 -1.1E+4932 |
Infinis | Oui | Oui | Non | Oui |
NaN | Oui | Oui | Oui | Oui |
Dans la mesure du possible, SANE entrepose les résultats sous une forme numérique normalisée, où le bit de poids fort dans le significande est 1 (c'est-à-dire 1 ~ significande < 2). Garder les nombres normalisés assure l'unicité de la représentation et offre une précision maximale pour une largeur de significande donnée.
Exemple : Intervalle de Single
En format simple, le plus grand nombre représentable est composé comme suit :
significand | = 2-2-23 |
= 1.111111111111111111111112 | |
exposent | = 127 |
valeur | = (2-2-23) x 2127 |
≈ 3.403 x 1038 | |
Le plus petit nombre normalisé positif représentable dans un format unique est composé comme suit :
significand | = 1 |
= 1.000000000000000000000002 | |
exposent | -126 |
valeur | = 1 x 2-126 |
≈ 1.175 x 10-38 | |
Pour les nombres dénormalisés, la plus petite valeur positive représentable en simple est composée comme suit :
significand | = 2-23 |
= 0.000000000000000000000012 | |
exposent | -126 |
valeur | = 2-23 x 2-126 |
≈ 1.401 x 10-45 | |
Formats
Cette section présente les formats des quatre types de données numériques SANE. Ce sont des représentations graphiques et peuvent ne pas refléter l'ordre réel des octets dans une implémentation particulière.
Chacun des schémas des pages suivantes est suivi d'un tableau donnant les règles d'évaluation du nombre. Dans chaque champ de chaque diagramme, le bit le plus à gauche est le msb (bit le plus significatif) et le plus à droite est le lsb (bit le moins significatif). Les symboles utilisés dans les schémas sont définis dans le tableau suivant :
Symbole | Description |
---|---|
v | Valeur du nombre |
s | Signe un bit |
e | Exposant biaisé |
i | Un bit explicite (type étendu uniquement) |
f | Fraction |
d | Bits non signés (type Comp uniquement) |
Single
Le format Single 32 bits est divisé en trois champs, comme illustré dans l'image suivante :
La valeur v du nombre est déterminée par ces champs, comme indiqué dans le tableau suivant :
Exposant biaisé e | Fraction f | Valeur v | Classe de v |
---|---|---|---|
0 < e < 255 | (n'importe quel) | v = (-1)S x 2(e- 127) X (1,f) | Normalisé |
e=0 | f ≠ 0 | v= (-1)S x 2(-126) x (0,f) | Dénormalisé |
e=0 | f=0 | v= (-1)S x0 | Zéro |
e=255 | f≠0 | v=(-1)S x Infini | Infini |
e=255 | f≠0 | v est un NaN | NaN |
Double
Le format double 64 bits est divisé en trois champs, comme illustré dans l'image suivante :
La valeur v du nombre est déterminée par ces champs comme indiqué dans le tableau suivant :
Exposant biaisé e | Fraction f | Valeur v | Classe de v |
---|---|---|---|
0 < e < 2047 | (n'importe quel) | v = (-1)S x 2(e-1023) x (1,f) | Normalisé |
e=0 | f ≠ 0 | v= (-1)Sx 2(-1022)x(0,f) | Dénormalisé |
e=0 | f=0 | v=(-1)S x 0 | Zéro |
e=2047 | f=0 | v=(-1)S x Infini | Infini |
e=2047 | f ≠ 0 | v est un NaN | NaN |
Comp
Le format Comp de 64 bits est divisé en deux champs, comme illustré dans l'image suivante :
La valeur v du nombre est déterminée par ces champs comme indiqué dans le tableau suivant :
Bits de signe | Bits non signés d | Valeur v |
---|---|---|
s=1 | d=0 | v est l'unique NaN de Comp. |
s=1 | d≠0 | v est la valeur du complément à deux de la représentation 64 bits. |
s=0 | (n'importe quel) | v est la valeur du complément à deux de la représentation 64 bits. |
Extended
Les paquets logiciels SANE utilisent un format étendu 80 bits. Le format étendu 80 bits est composé de quatre champs, comme illustré dans l'image suivante :
Le coprocesseur à virgule flottante MC68881 utilise un format étendu 96 bits composé de cinq champs, comme illustré dans le tableau suivant. (Le format 96 bits est utilisé car le MC68020 accède plus efficacement aux données sur les limites des mots longs.) Notez que les champs s, e, i et f au format 96 bits sont les mêmes que ceux au format 80 bits ; le champ grisé n'est pas utilisé :
Le tableau suivant montre comment la valeur v du nombre est déterminée par les champs illustrés dans les 2 figures précédente :
Exposant biaisé e | Entier I | Fraction f | Valeur v | Classe de v |
---|---|---|---|---|
0 ≤ e ≤ 32766 | 1 | (n'importe quel) | v =(-1)S x 2(e-16383) x (1,f) | Normalisé |
0 ≤ e ≤ 32766 | 0 | f ≠ 0 | v= (-1)Sx 2(e-16383) x (0,f) | Dénormalisé |
0 ≤ e ≤ 32766 | 0 | f = 0 | v=(-1)S x 0 | Zéro |
e=32767 | (n'importe quel) | f=0 | v=(- 1)Sx Infini | Infini |
e=32767 | (n'importe quel) | f ≠ 0 | v est un NaN | NaN |