Section courante

A propos

Section administrative du site

 Langage  Elément  Annexe 
ABAP/4
Ada
Assembleur
Assembly & bytecode
ASP (Active Server Pages)
Basic
C
C++
C# (C Sharp)
Cobol
ColdFusion
Fortran
HTML
Java
JavaScript
LISP
Logo
LotusScript
Oberon
Pascal
Perl
PHP
PL/1
Prolog
Python
Rebol
REXX
Ruby
Rust
SAS
NoSQL
SQL
Swift
X++ (Axapta)
GNAT
SMALLAda
VHDL
Assembleur 370
Assembleur 1802
Assembleur 4004
Assembleur 6502
Assembleur 6800
Assembleur 68000
Assembleur 8080 et 8085
Assembleur 8089
Assembleur 80x86
Assembleur AGC4
Assembleur ARM
Assembleur DPS 8000
Assembleur i860
Assembleur Itanium
Assembleur MIPS
Assembleur PDP-11
Assembleur PowerPC
Assembleur RISC-V
Assembleur SPARC
Assembleur SuperH
Assembleur UNIVAC I
Assembleur VAX
Assembleur Z80
Assembleur Z8000
Assembleur z/Architecture
ASSEMBLER/MONITOR 64
Micol Assembler
GFA Assembler
A86
MASM (Macro Assembler)
TASM (Turbo Assembler)
CIL
Jasmin
LLVM
MSIL
Parrot
P-Code (PCode)
SWEET16
G-Pascal
ASP 1.0
ASP 2.0
ASP 3.0
ASP.NET
ASP.NET Core
ABasiC (Amiga)
Adam SmartBASIC
Altair BASIC
AmigaBASIC (Amiga)
AMOS Basic (Amiga)
Atari Basic (Atari 400, 600 XL, 800, 800XL)
Basic Apple II (Integer BASIC/APPLESOFT)
Basic Commodore 64 (CBM-BASIC)
Basic Commodore 128 (BASIC 7.0)
Basic Commodore VIC-20 (CBM-BASIC 2.0)
Basic Coco 1 (Color Basic)
Basic Coco 2 (Extended Color Basic)
Basic Coco 3 (Extended Color Basic 2.0)
BASICA (PC DOS)
Basic Pro
BBC BASIC
Blitz BASIC (Amiga)
DarkBASIC
Dartmouth BASIC
GFA-Basic (Atari ST/Amiga)
GWBASIC (MS-DOS)
Liberty BASIC
Locomotive BASIC (Amstrad CPC)
MSX-Basic
Omikron Basic (Atari ST)
Oric Extended Basic
Power Basic
Quick Basic/QBasic (MS-DOS)
Sinclair BASIC (ZX80, ZX81, ZX Spectrum)
ST BASIC (Atari ST)
Turbo Basic
Vintage BASIC
VBScript
Visual Basic (VB)
Visual Basic .NET (VB .NET)
Visual Basic pour DOS
Yabasic
BeckerBASIC
SIMONS' BASIC
Basic09 d'OS-9
Disk Extended Color Basic
Basic09 d'OS-9
Disk Extended Color Basic
Access
Excel
Visual Basic pour Windows
Visual Basic .NET pour Windows
C Shell Unix (csh)
C pour Amiga
C pour Atari ST
C pour DOS
C pour Falcon030
C pour GEMDOS (Atari ST)
C pour Linux
C pour PowerTV OS
C pour OS/2
C pour Unix
C pour Windows
Aztec C
CoCo-C
GNU C
HiSoft C
IBM C/2
Introl-C
Lattice C
Microsoft C
MinGW C
MSX-C
Open Watcom C
OS-9 C Compiler
Pure C
Quick C
Turbo C
HiSoft C for Atari ST
HiSoft C for CP/M (Amstrad CPC)
C++ pour OS/2
C++ pour Windows
Borland C++
C++Builder
IBM VisualAge C++
Intel C++
MinGW C++
Open Watcom C++
Symantec C++
Turbo C++
Visual C++
Visual C++ .NET
Watcom C++
Zortech C++
C# (C Sharp) pour Windows
Apple III Cobol
Microsoft Cobol
BlueDragon
Lucee
OpenBD
Railo
Smith Project
Microsoft Fortran
WATFOR-77
CSS
FBML
Open Graph
SVG
XML
XSL/XSLT
LESS
SASS
GCJ (GNU)
JSP
Jython
Visual J++
Node.js
TypeScript
AutoLISP
ACSLogo
LotusScript pour Windows
Amiga Oberon
Oberon .NET
Apple Pascal
Delphi/Kylix/Lazarus
Free Pascal
GNU Pascal
HighSpeed Pascal
IBM Personal Computer Pascal
Lisa Pascal
Maxon Pascal
MPW Pascal
OS-9 Pascal
OSS Personal Pascal
Pascal-86
Pascal du Cray Research
Pascal/VS
Pascal-XT
PURE Pascal
QuickPascal
RemObjets Chrome
Sun Pascal
THINK Pascal
Tiny Pascal (TRS-80)
Turbo Pascal
UCSD Pascal
VAX Pascal
Virtual Pascal
Turbo Pascal for CP/M-80
Turbo Pascal for DOS
Turbo Pascal for Macintosh
Turbo Pascal for Windows
CodeIgniter (Cadre d'application)
Drupal (Projet)
Joomla! (Projet)
Phalanger (PHP .NET)
phpBB (Projet)
Smarty (balise)
Twig (balise)
Symfony (Cadre d'application)
WordPress (Projet)
Zend (Cadre d'application)
PL360
PL/M-80
PL/M-86
Turbo Prolog
CPython
IronPython
Jython
PyPy
AREXX
Regina REXX
JMP
Btrieve
Cassandra
Clipper
CouchDB
dBASE
Hbase
Hypertable
MongoDB
Redis
Access
BigQuery
DB2
H2
Interbase
MySQL
Oracle
PostgreSQL
SAP HANA
SQL Server
Sybase
U-SQL
Introduction
Types de données SANE
Opérations arithmétiques
Conversions dans SANE
Norme
Standard
Loi

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 :

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


PARTAGER CETTE PAGE SUR
Dernière mise à jour : Mercredi, le 8 février 2023