next up previous contents index
suivant: Caractères monter: Représentation des valeurs primitives précédent: Opérations bit à bit   Table des matières   Index


Types flottants

Les flottants sont des représentations en mémoire d'une partie des nombres rationnels ; il est évidemment impossible de représenter des nombres réels quelconques, pour des raisons de cardinalité. Seuls les rationnels dont la forme irréductible est 167#167, peuvent avoir une représentation exacte ; les autres ont nécessairement une représentation approchée (par exemple, le nombre décimal 168#168 a 169#169 comme représentation en base 2, la partie soulignée étant répétée indéfiniment). Cette représentation fait l'objet de la norme IEEE 7542.3, publiée en 1985 et adoptée par la plupart des fabricants d'ordinateurs. Cette norme distingue deux niveaux de précision, auxquels correspondent les deux types primitifs flottants de Java :

Il est souhaitable que le numéricien programmeur ait une idée de la représentation des flottants, sans qu'il doive nécessairement en connaître tous les détails.

Un nombre flottant est caractérisé par trois blocs de bits, qui déterminent respectivement son signe, son exposant et sa mantisse. Chacun de ses blocs est de taille fixe :

  simple précision double précision
taille 32 bits 64 bits
signe 1 bit, 170#170 1 bit, 171#171
exposant 8 bits, 172#172 11 bits, 173#173
mantisse 23 bits, 174#174 52 bits, 175#175

La valeur d'un flottant 176#176 est 177#177, où, dans le cas de la simple précision :


181#181

Dans l'exposant, soustraire 127 permettrait de représenter le plus petit exposant, 182#182, par les bits 0000 0000 et le plus grand exposant, 183#183, par les bits 1111 1111 ; 184#184 est par exemple représenté par 0111 1111. En fait, 0000 0000 et 1111 1111 ont des significations spéciales, pour représenter 0, 185#185, et NaN (c'est-à-dire Not a Number) ; les exposants extrêmes des flottants normalisés sont donc 186#186 (environ 187#187, par 0000 0001) et 188#188 (environ 189#189, par 1111 1110). La valeur de la mantisse étant toujours 190#190, zéro n'est pas représentable dans ce schéma ; par convention, le bit de signe suivi de 31 bits nuls représentent la valeur 191#191 (et non 192#192)2.4. Si les bits d'exposant valent 1, et les bits de mantisse valent 0, la valeur est 194#194, qui est obtenue dans le cas d'une division par 0. Enfin, si les bits d'exposant valent 1, et les bits de mantisse ne sont pas tous nuls, la valeur est NaN, qui peut être obtenue comme le résultat d'opérations illicites, comme 195#195 , 196#196, ou 197#197.

Bien que portant les mêmes noms (addition, multiplication), les opérations flottantes ne sont pas ces opérations mathématiques et n'ont pas les mêmes propriétés. Par exemple, l'addition n'est pas associative : on peut vérifier que 198#198, tandis que 199#199. Autre exemple : la série 200#200 converge !

Les valeurs de type double peuvent être notées avec un signe, un point décimal et un exposant optionnel, par exemple -2.3e+4. Pour le type float, la constante doit être terminée par F (ou f) : 3.141592653 est un double, 6.02e23F est un float.


next up previous contents index
suivant: Caractères monter: Représentation des valeurs primitives précédent: Opérations bit à bit   Table des matières   Index
Rene' LALEMENT 2002-11-07