Codage Binaire des Nombres

Auteur et date de la dernière mise à jour de la page. EC @ IV.2008
Lecture(s) conseillée(s) avant d'attaquer le présent chapitre. L'information binairePage certes un peu pénible, mais néanmoins fondamentale.
Liste des mots et notions définis tout au long de cette page.

Alors voilà...

Le visionnaire...

Un beau matin de février -29.981, Kévin Cro-Magnon, chasseur-cueilleur en RTT, ouvre sa grosse main velue et observe tour à tour chacun de ses doigts boudinés. Puis, lâchant son os de mammouth à moitié rongé, poursuit l'observation hébétée de son autre main pour finalement hurler à travers la savane endormie "KIMAZDAMONBIGMAC ?", cri primal approximativement traduisible en "Quel est l'Australopithèque qui m'a lâchement dérobé mon quatre heure ?".

Bon, d'accord... L'invention de la numération en base 10 est remise à plus tard... Mais elle n'en sera pas moins promise à un bel avenirAvenir si prometteur que, désormais, le petit homme a mieux intérêt à maîtriser la calculatrice que le dictionnaire s'il veut réussir sur cette planète... auprès des hominidés, créatures décadactyléesDu grec DECA: dix et DACTULOS: doigt. Bref, un néologisme propre sur lui qui mériterait d'être dans le dictionnaire. par nature.

L'ordinateur, lui, est une créature imberbe, végétarienne, mais surtout complètement manchote. Pas de main, donc pas de doigt, et donc aucune raison de compter en base 10.
Mais alors, sur quoi l'ordinateur compte-t-il ?
Il compte sur ses bitsEt la souplesse n'a rien à voir avec tout cela ! Le bit est l'unité d'information de l'ordinateur, c'est-à-dire la plus petite chose qu'il peut concevoir, à savoir cette simple alternative: "0" ou "1"..
Et si !

Très intimement lié à l'activité humaine, l'ordinateur a pourtant intérêt à disposer de quelques solides méthodes afin de se représenter les nombres dans leur infinie variété: entiers ou décimaux, signés ou non signés, éléments de N, Z, Q, R et autres ensembles aux noms chantants...
Et tout cela uniquement à l'aide de "1" et de "0".

Qui a dit que binaire était synonyme d'enfantin ?

Codage de N (entiers naturels)

N ! Les "entiers naturels", comme ils disent en hauts lieux. Ces nombres que nous utilisons tous les jours, tout simplement, pour compter les objets qui nous entourent: silex, peaux de bête, mouflets, cicatrices... Avec eux, pas de signe négatif, pas de virgule, pas de fractions irrésolues. Que du concret ! Que du pratique ! Bref, les maths comme on les aime... version paléolithique...

Numération et règlement de compte

"L'Homme est un animal qui compte."L'auteur de cette page, hier vers 23h10

A ses premiers babillements, l'Homme se servit très naturellement pour compter de la seule calculatrice qu'il eût toujours sous la main, à savoir ces dix chipolatas roses appelées doigts, qui, levés successivement, lui permettent de représenter dix chiffres.

Par la suite, dès qu'il sût contrôler un tant soit peu ses grognements, l'Homme associa un mot à chacun de ces chiffres. Dès lors, l'univers des nombres s'ouvrait d'un coup aux estropiés et autres affligés des doigts.Population non négligeable en ces temps incertains où le lapin de garenne offrait encore quelque résistance au chasseur.
Mais problème: les mots employés par cette tribu différaient bien souvent des mots utilisés par la tribu d'en face.

Restait un progrès à venir: l'invention de l'écriture et la manière de représenter les nombres à l'aide de symboles graphiques.

Attention, paronymes !

Ne confondons pas les mots numération, qui définit le système permettant d'écrire et de nommer les nombres, et numérotation, qui est l'action d'affecter un numéro, c'est-à-dire de numéroter.

Oui mais voilà ! Les nombres étant par nature assez... nombreux, il s'avère délicat d'associer un mot ou un symbole unique à chacun d'entre eux. D'où, très vite, la nécessité de se frotter à l'épineux problème de la numération, c'est-à-dire à l'art et la manière de représenter les nombres de façon à pouvoir les identifier, les reconnaître, et, ainsi, les garder en mémoire.

Homo comptabilis, créature de la base 10

Aujourd'hui, la quasi totalité de l'Humanité...même les Anglais.
C'est pour dire...
se sert pour représenter les nombres du même système de numération qualifié de numération décimale positionnelle, expression bien barbare pour définir de fait une méthode que nous avons tous assimilée dès nos premières dents.

Ainsi, juste pour illustrer la chose, désignons au hasard un nombre innocent et volontaire... Par exemple, 5.022.
Nous savons tous, de manière quasi réflexe, que

     5.022 = 5 x 1.000 + 0 x 100 + 2 x 10 + 2 x 1          ...ce qui revient à écrire:
     5.022 = 5 x 103 + 0 x 102 + 2 x 101 + 2 x 100

...puisque 100 = 1, comme d'ailleurs n'importe quel nombre élevé à la puissance zéroLe genre d'égalité fondamentale qui liquéfie sur place tout littéraire normalement constitué... Mais qui s'explique finalement assez bien....

Démonstration, en passant, de l'égalité n0 = 1 (∀ n ∈ N)

Bien, nous savons déjà parfaitementAh bin oui, faut quand même quelques bases. que quels que soient n, a et b trois nombres quelconques, le nombre na-b peut également s'écrire na / nb.

Ceci su, on peut donc écrire:

   n0 = na-a = na / na = 1

Des nombres et des hommes

Convaincu(e) que l'Homme se trouvant doté de dix doigts, la numération décimale est la plus évidente et la plus naturelle des manières de compter ?
Cette très jolie pageAvertissement ! Au cas où vous manifesteriez un tant soit peu d'intérêt pour les Mathématiques, il est fort possible que nous ne nous revoyons pas une fois cliqué sur ce lien, tant le site vers lequel il pointe est passionnant ! est faite pour vous.

Notre décomposition de 5.022, sûrement inutile à vos yeux, a néanmoins le mérite de rendre lumineux le caractère décimal de ce système de numération.
En terme très mathématique, on dit que 10 constitue la base de notre système. Il s'explique simplement par le nombre de symboles graphiques, ou chiffres, dont nous disposons pour représenter nos nombres: 0, 1, 2, 3, 4, 5, 6, 7, 8 et 9.

L'autre intérêt de notre petit exercice est d'illustrer le caractère positionnel de notre système puisque nous constatons que la numération telle que nous la pratiquons consiste simplement à juxtaposer les coefficients associés aux puissances de dix successives, en omettant tout bonnement d'indiquer ces dernières.

Dès lors, la position d'un chiffre au sein d'un nombre est essentielle, chaque position ayant un "poids" croissant d'un facteur 10 de la droite vers la gaucheAinsi, le chiffre placé le plus à droite (c'est-à-dire d'ordre 1) a un "poids" de 1 (ce sont les unités), le chiffre situé immédiatement à sa gauche (d'ordre 2), un "poids" de 10 (ce sont les dizaines), le chiffre suivant (d'ordre 3) un "poids" de 100 (ce sont les centaines, etc..

Test de base

Imaginez trois cases vides dans chacune desquelles il serait possible d'écrire un seul chiffre décimal (de 0 à 9). Combien de valeurs entières positives différentes pourrons nous représenter en combinant ces trois cases ?
3
Euh...non. Les trois cases formeront certes trois chiffres, mais ces chiffres, mis côte-à-côte, formeront un nombre. C'est le nombre de ces combinaisons différentes que nous vous demandons.
999
Et non ! 999 est le nombre le plus grand que nous pourrons représenter avec ces trois cases, mais vous n'auriez pas oublié le plus petit, des fois ?
1.000
Bien sûr. 000, 001, 002, 003... etc jusqu'à 999 - soit 1.000 nombres différents.

Pulex informatix, créature de la base 2

"La puce est une machine, mais qui compte aussi."Toujours l'auteur de cette page, hier vers 23h15

Bien ! Oubliez maintenant un instant votre univers décimal si douillet et imaginez que nous n'ayions, pour représenter les nombres, non plus dix symboles différents, mais seulement deux: le "0" et le "1".
Puis reprenons notre petit exercice précédent...

Test de base (plus petite)

A l'aide de nos mêmes trois cases, combien cette fois pourrons-nous constituer d'entiers positifs différents avec nos deux seuls petits chiffres ?
8
Effectivement. 000, 001, 010, 011, 100, 101, 110, 111 - soit 8 nombres, c'est-à-dire 23.
111
Attention à la confusion ! 111 est bien le nombre le plus grand que nous pourrons constituer avec ces trois cases, mais ce n'est pas le nombre de combinaisons différentes que nous pouvons composer.
1.000
Ah carrément ! Et pourtant, avec le même nombre de cases que dans l'exercice précédent, mais avec beaucoup moins de possibilités pour les remplir (deux chiffres au lieu de dix), il serait plutôt normal de trouver un nombre moins important de combinaisons possibles, non ?
Et dans la foulée, une question subsidiaire: pourrons-nous représenter avec nos deux seuls chiffres autant de nombres qu'en base 10 ?
Oui, évidemment !
Evidemment, oui ! Il nous faudra seulement davantage de cases.
Bien sûr que non !
Et pourtant si ! Il nous faudra seulement davantage de cases.

Et bien nous y voilà ! Bienvenue dans la numération binaire positionnelle ! Le système de numération pour lequel tout nombre, quel qu'il soit, sera uniquement composé à partir des chiffres 0 et 1 - ce qui, il faut bien le reconnaître, n'est pas pour déplaire à nos chers processeurs.

C'est écrit dessous

L'informatique usant volontiers de plusieurs bases, il est parfois utile de préciser qu'un nombre est exprimé en base 10 en le mentionnant en indice, de cette manière: 5.02210.

De la même façon, il peut être utile de préciser qu'un nombre est exprimé en base 2Oui, c'est vrai qu'un nombre exprimé en base 2, surtout s'il est grand, se repère généralement assez vite...
mais on n'est jamais trop prudent.
en procédant de manière similaire, par exemple: 100112.

Mais même si nous changeons de base, les principes de la numération positionnelle restent parfaitement identiques. Nous aurons simplement soin de remplacer nos puissances de dix par des puissances de deux.

Ainsi, si nous prenons un nombre quelconque exprimé en base 2 (par exemple, 10011Oui, c'est la caractéristique des nombres exprimés en base 2: ils sont un peu monotones...) et que nous lui appliquons la même décomposition que nous avons accomplie un poil plus haut à un nombre décimal, nous pouvons écrire:

     10011 = 1 x 24 + 0 x 23 + 0 x 22 + 1 x 21 + 1 x 20          ...ce qui revient à écrire:
     10011 = 1 x 16 + 0 x 8 + 0 x 4 + 1 x 2 + 1 x 1

Un plus un égal un zéro

Et n'allez pas appeler "cent" le nombre 1002 ! Dites plutôt "un-zéro-zéro" et oubliez tous vos adjectifs numéraux au delà du "un" si vous comptez parler en base 2 avec un proche.

... c'est-à-dire 19.

Félicitations ! Vous savez désormais convertir un entier de la base 2 vers la base 10 et, de fait, savez comment s'y prend l'ordinateur afin de coder les entiers naturels.
Enfin, quasiment...

"Quasiment" car il faut nous rappeler à ce stade la petite caractéristique de l'ordinateur: sa propension à manipuler des octetsUn petit lien, pour rappeler les faits..., et non des bits isolés. Ceci explique que le nombre 10011, notre exemple, sera en fait codé ainsi: 00010011, avec trois zéros initiaux, non significatifs pour les calculs, mais néanmoins indispensables de par le mode de fonctionnement interne du processeur.

Quand "1" = 1 et "0" = 0...

Comme vous êtes un(e) lecteur(trice) consciencieux(se) et appliqué(e), vous avez bien évidemment parcouru la page de ce site consacrée à l'information binaire et y avez découvert, sans doute un peu surpris(e), que le "1" et le "0", briques élémentaires constituant les données "numériques", s'apparentaient davantage à une convention d'écriture qu'ils ne symbolisaient les chiffres un et zéro tels que nous les entendons.

Et bien le codage binaire des entiers tel que nous venons de le voir, c'est-à-dire le codage par numération binaire positionnelle est le contre-exemple absolu de cette dernière remarque ! Il s'agit en effet, parmi la batterie de codages dont dispose un processeur, l'un des seuls pour lequel le "1" code bel et bien le chiffre "un", et le "0" code bel et bien le chiffre "zéro". L'exception qui confirme la règle, en quelque sorte.

Mais ce n'est là qu'une sorte de hasard, rendu possible par le principe même de la numération positionnelle. Nous verrons plus bas sur cette page et dans les autres pages de ce site consacrées aux différents codages binaires que c'est loin d'être toujours le cas !

D'une base à l'autre

Les conversions entre entiers exprimés en base 10 et base 2 restent du domaine de l'enfantin, dès lors que vous connaissez vos puissances de deux et savez reconnaître un nombre pair d'un nombre impair.
Démonstration:

Conversion entre bases décimale et binaire

Cliquez sur les bitsVous vous laverez les mains après... du nombre binaire ou sur les chiffres du nombre décimal afin d'en obtenir la conversion dans l'autre base de numération.
La conversion de la base 2 vers la base 10 ne pose aucune difficulté, dès lors que l'on replace les puissances de deux tacites entre les différents coefficients constituant le nombre binaire.

Il existe plusieurs méthodes pour procéder à la conversion de la base 10 vers la base 2. Celle exposée ci-dessus, élémentaire, consiste simplement à diviser le nombre décimal à convertir par deux puis recommencer l'opération sur le résultat entier obtenu jusqu'à ce que le résultat soit nul, en conservant à chaque itération le reste de l'opération (0 si le résultat est pair, 1 s'il est impair). Les différents restes obtenus, juxtaposés de droite à gauche, constituent le nombre binaire recherché.

Et comme vous avez parfaitement compris le principe du codage binaire des entiers, vous ne serez pas surpris(e) de constater l'impossibilité de convertir en binaire sur un octet un entier décimal supérieur à 255...

La très embarrassante situation du bit qui dépasse

Malgré leur aspect quelque peu monotone pour nous autres, créatures décimales, les entiers binaires se comportent comme des nombres tout à fait "normaux", et se prêtent donc aux mêmes opérations classiques que notre arithmétique en base 10.

Petite démonstration multiplicatrice que les nombres binaires sont des nombres comme les autres...
Multiplication de deux nombres binaires

Cliquez sur les bits constituant le multiplicande et le multiplicateur pour voir le résultat de la multiplication correspondante.

Nous voyons bien que la multiplication et l'addition binaires n'ont rien de bien révolutionnaires puisqu'ici comme ailleurs, tout est question de retenues.
Et il en est tout à fait de même pour la soustraction et la division, vous pouvez nous croire.

...Avec une petite différence néanmoins. Une énorme différence, en fait... Due à la manie très particulière qu'a la machine de toujours faire tenir ses entiers dans un nombre fixe d'octet(s). Il se peut, en effet, qu'au cours d'un calcul, le résultat produit donne un résultat trop grand pour pouvoir "tenir" dans le nombre d'octets alloués au codageAinsi en serait-il d'une opération entre deux entiers codés sur un octet dont le résultat serait supérieur à 111111112, ou de deux entiers codés sur deux octets dont le résultat excèderait 11111111 111111112.. Que se passe-t-il alors ?

Et bien le processeur déclenche dans ce cas une alerte interne appelée overflow ou, s'il est d'origine francophone, dépassement de capacité, qui provoque l'arrêt du calcul en cours, calcul de toute façon erroné.

Comme vous vous en doutez, si rien n'est prévu dans le programme afin de gérer cette situation embarrassante, les conséquences peuvent s'avérer fâcheuses et prendre toutes les apparences d'un bon bug des familles.

Dois-je, moi, utilisateur inquiet et scrupuleux, faire spécialement attention à ne pas provoquer d'overflow en utilisant mes programmes préférés ?

Absolument ! Ou votre ordinateur risque l'implosion.

Mais non, mais non, voyons ! C'est au programmeur qui conçoit le logiciel de prévenir ce genre d'incident en prévoyant un nombre d'octets suffisant pour coder les entiers que son application est susceptible de gérer.
Au prix où on le paye, il peut bien faire ça...

En pratique, combien d'octet(s) un processeur alloue-t-il réellement au codage des entiers ?

Ici aussi, c'est à la discrétion du programmeur d'allouer un nombre donné d'octets au codage des entiers gérés par son application. Il existe toutefois des types génériques d'entiers définis dans les langages de programmation, à l'image par exemple des types int et long dans le langage C, allouant respectivement deux et quatre octets pour le codage des entiers.

Bien évidemment, il serait tentant de toujours préférer un nombre maximal d'octets afin de minimiser tout risque de débordement, mais cette solution se révèlerait très gourmande en mémoire, tous les entiers, même les plus petits, occupant alors ce nombre maximal d'octets pour leur stockage.
C'est une petite partie de l'art du programmeur de trouver le juste compromis entre sécurité et économie des ressources mémoire.

Codage de Z (entiers relatifs)

Comme l'a très bien fait comprendre son banquier à l'auteur de cette page, les nombres négatifs constituent décidément un très gros problème... En binaire, pareil ! Premier défi, donc: comment représenter à l'aide de bits les entiers positifs ET négatifs, sachant qu'en bonne machine totalement binaire, un bête processeur ne pige ni le signe plus, ni le signe moins ?

Signe particulier: sous forme de bit

Sachant qu'un signe en mathématique ne peut prendre que deux valeurs différentes, un réflexe quasi bestial pourrait nous incliner à dédier le bit de plus haut poids...autrement dit le bit situé le plus à gauche. de la séquence à l'indication du signe: par exemple "0" pour les entiers positifs et "1" pour les entiers négatifs.

Cette approche, fort simple et parfaitement valable, est appelée représentation signe-valeur absolue, mais comporte deux très légers inconvénients de taille:

Non, franchement, si on pouvait trouver un autre moyen...ça arrangerait bien pupuce......

Codage des entiers relatifs par la représentation signe-valeur absolue

Cliquez sur les bits du nombre binaire afin d'obtenir la valeur de l'entier codé correspondant ou sur les chiffres et/ou signe du nombre décimal afin d'en obtenir le codage binaire par la représentation signe-valeur absolue.

Comme nous pouvons le constater, le bit de plus haut poids étant désormais chargé de coder le signe, il perd son rôle de coefficient associé à la valeur 27. Conséquence immédiate: le plus grand entier relatif "codable" devient 127 (01111111), et le plus petit -127 (11111111).

Attention ! Comprenez bien qu'il n'est plus possible ici de parler de conversion entre bases décimale et binaire, car la représentation par signe-valeur absolue ne constitue plus stricto sensu une numération positionnelle, de par la présence du bit de signe. Il s'agit plutôt dans ce cas d'un simple codage binaire, dans le sens où l'on transforme une information (ici, un entier) en une séquence de bits.

Un complément pour avoir moins ?

Le Complément d'Objet Négatif

Soit un nombre binaire N composé de p bits...le genre de début de phrase qui annonce des moments difficiles.... En mathématique, on appellera complément à 1 de N le nombre noté N tel que N + N = 2p - 1.

En langage compréhensible, ce complément N est donc le nombre qui, ajouté à N, donnera un résultat composé uniquement de 1.
Par exemple, 1001012 est le complément à 1 de 0110102 puisque on a bien:

En base 10 aussi

Notons, pour notre curiosité personnelle, qu'il est tout à fait possible d'imaginer un équivalent du complément à 1 en base 10. Ce nombre s'appellerait alors complément à 9 et se définirait comme le nombre N, tel que N+N donne un résultat uniquement composé de neuf.

     1001012 + 0110102 = 1111112 = 26 - 1

Techniquement parlant, ce complément à 1, également appelé complément logique, est très facile à obtenir puisqu'il suffit de remplacer les "1" par des "0", et vice versa.

Notons en passant que, de par la définition du complément à 1, on a:

     N + N = 2p - 1     ...soit, par d'habiles transferts de part et d'autre de l'égalité:   -N = N + 1 - 2p

Bien. Concentrons-nous maintenant un chouia et rappelons-nous qu'un processeur a pour habitude de coder ses nombres sur un nombre fixe d'octet(s). Dès lors, p est égal à 8, 16 voire 32 et, conséquence immédiate, 2p est donc un nombre composé d'un "1" suivi de 8, 16, voire 32 "0" - c'est-à-dire un nombre trop grand pour tenir dans le nombre d'octet(s) qui lui est alloué.

Ce "1" initial, puisque débordant sur la gauche, peut-être très facilement ignoré par la machine. Dès lors, le nombre 2p se voit réduit à une série de "0", c'est-à-dire 0.

Et on se retrouve alors avec l'égalité simplifiée:   -N = N + 1

Hé, hé... En mathématiques, -N est appelé l'opposé de N, et ce, en base 10 comme en base 2 ! Il semble donc bien que, l'air de rien, nous ayions trouvé là une manière très élégante de représenter en binaire les entiers négatifs, simplement en ajoutant un au complément à 1 de leur opposé positif.

En binaire, on appelle complément à 2 (ou encore complément arithmétique...ou bien encore complément vrai.) de N cette valeur N + 1.

Codage des entiers relatifs par la méthode du complément à 2.

Cliquez sur les chiffres du nombre décimal pour en obtenir la conversion en binaire "pur" (c'est-à-dire en numération binaire positionnelle classique), le complément à 1 et le complément à 2.

Les petits malins auront remarqué que pour obtenir rapidement le complément à 2 d'un nombre binaire, il suffit de recopier tels quels les bits à partir de la droite jusqu'au premier "1" inclus, puis d'inverser les bits suivants.

Caractéristiques du complément à 2

Bien ! Maintenant que nous avons compris le principe du codage des entiers relatifs par la méthode du complément à 2, penchons-nous un peu sur ses caractéristiques les plus remarquables.
Et elles le sont !

Petites remarques uniquement destinées à celles et ceux qui auraient survécu au présent chapitre.

Pour présenter celles-ci, on supposera que le codage binaire est réalisé sur un octet, mais le raisonnement reste le même, quel que soit le nombre d'octets finalement choisi pour le codage.

  • Le cas de la valeur zéro est intéressant et permet de comprendre pourquoi ce type de codage est rendu possible par le fonctionnement interne d'un processeur. En effet, le nombre 0 étant codé par l'octet 00000000, son complément à 1 est, sans surprise, l'octet 11111111. Le complément à 2, puisqu'il s'agit d'ajouter un à cette dernière valeur, sera par conséquent 100000000. Ce "1" initial, débordant de l'octet prévu pour le codage, est tout bonnement ignoré par la machine, ce qui nous permet de retrouver la relation fondamentale 0 = 0.
  • Il est somme toute normal de constater que cette méthode de complément à 2 exploite les 256 configurations différentes permises par un octet (de 00000000 à 11111111). Le nombre zéro se trouvant codé par une seule valeur (voir ci-dessus), il est non moins normal de constater que l'intervalle de codage permis [-128, 127] est, par conséquent, asymétrique - le procédé permettant le codage d'une valeur négative de plus que le nombre de valeurs positives codables.
Comment coderiez-vous l'entier -6010 sur un octet par la méthode du complément à 2 ?
00111100
Non. 00111100 est le codage de +6010. Rappelez-vous qu'un entier négatif codé par la méthode du complément à 2 aura toujours son bit de plus haut poids positionné à "1".
11000100
Parfaitement. Le nombre +6010 est codé par l'octet 00111100. Afin d'obtenir facilement le complément à 2 de ce nombre, et, donc, le codage binaire de son opposé, il suffit de recopier les bits de droite à gauche jusqu'au premier "1" inclus, puis de continuer en inversant cette fois les bits restants.
10111100
Erreur ! cet octet code bel et bien le nombre -6010, mais par la méthode de codage signe-valeur absolue.
Supposez désormais que vous deviez coder ce même nombre, par la même méthode, mais cette fois-ci sur deux octets. Quel couple d'octets obtiendrez-vous ?
00000000 11000100
Logique, semble-t-il. Mais complètement faux ! Pour vous en persuader, rappelez-vous que pour tout entier négatif codé par la méthode du complément à 2, le bit de plus haut poids doit être égal à "1". Ce qui n'est manifestement pas le cas ici.
11111111 11000100
Excellent ! Ce genre d'opération, très commune en arithmétique binaire, consistant à ranger un nombre binaire dans un plus grand nombre de bits que le nombre de bits qu'il occupait originellement, se nomme extension de signe. Cette extension, enfantine lorsque le nombre codé est positif, s'avère beaucoup moins "naturelle" lorsqu'il est négatif. Dans tous les cas, la méthode générale d'extension de signe d'un nombre codé en complément à 2 consiste à déplacer le bit de plus haut poids jusqu'à sa nouvelle position la plus à gauche, et de le recopier pour chaque bit ajouté entre sa nouvelle et son ancienne position.
La démonstration mathématique est toute simple, mais nécessite pour être exposée de recourir à ces gros caractères ∑ qui effraient beaucoup le littéraire un peu farouche mais, surtout, constituent une véritable plaie pour le concepteur de page web un peu flemmard.
10000000 11000100
Non. De par la méthode de codage qu'est le complément à 2, ce couple d'octets devrait plutôt coder la valeur:
     -215 + 27 + 26 + 22     ...c'est-à-dire, de tête... -32.57210

La soustraction en somme

Vu comme ça, du coin d'un oeil très littéraire, le codage des entiers relatifs par la méthode du complément à 2 semble effectivement assez ingénieux mais d'un intérêt pratique assez douteux. Et pourtant ! Ce procédé de codage a l'immense intérêt de permettre à la machine de considérer la soustraction de deux entiers comme l'addition du premier à l'opposé du secondA - B = A + (-B) !

La chose a beau vous sembler évidente à vous, créature supérieurement intelligente, le fait est que ce type de représentation binaire des entiers permet à l'ordinateur de gérer effectivement une soustraction exactement comme s'il s'agissait d'une addition, ce que ne permettrait pas, par exemple, le codage par signe-valeur absolueRappelez-vous notre exemple de résultat plutôt surprenant....

D'un point de vue strictement matériel, cet avantage devient plus évident encore car au lieu de concevoir une machine avec un circuit électronique gérant l'addition et un autre circuit gérant la soustraction, un seul et même circuit peut être mis en place pour réaliser les deux opérations.
Gain de temps, de place, de coût... bref, l'ingénieur et l'actionnaire réunis dans une même allégresse jubilatoire.

L'addition-soustraction de deux entiers codés par la méthode du complément à 2

Cliquez sur les bits de l'un et/ou l'autre des termes de l'opération pour constater les conséquences sur le résultat.

Attention ! Notez qu'un bit surnuméraire peut tout à fait apparaître avec ce genre d'addition-soustraction, sans que le résultat ne soit pour autant erronéIl suffit alors au processeur d'ignorer ce bit pour que le résultat redevienne correct.. A l'inverse, le résultat peut tout à fait s'avérer faux sans qu'aucun bit surnuméraire n'apparaisse !

Nous voyons ici que dans le cas des entiers codés par complément à 2, les dépassement de capacité (ou overflows) ne sont plus du tout liés à l'apparition d'un bit surnuméraire. En réalité, dans ce cas très précis d'addition-soustraction d'entiers codés par complément à 2, ils se produisent lorsque deux entiers de même signe donnent un résultat de signe opposéOu, en d'autres termes, quand deux nombres dont le bit le plus à gauche est identique donne un résultat dont le bit le plus à gauche est inversé..

Quoi qu'il en soit, c'est toujours au processeur de surveiller le domaine de validité d'une opération de ce type et de déclencher une alerte overflow lorsque le résultat d'une opération est trop grand ou trop petit pour pouvoir être codé par la méthode de codage utilisée par ses membres.

Les bits en biais

Une autre possibilité de codage des entiers signés existe: la représentation biaisée (biased in english), également appelée représentation par excès. Celle-ci, très simple, consiste à considérer tout nombre binaire codé comme un entier non signé auquel on soustrait une constante, ou biais, définie selon le domaine de validité des entiers codés que l'on recherche.

Codage des entiers relatifs par la méthode de la représentation biaisée.

Cliquez sur les bits du nombre binaire et/ou les ciffres du nombre décimal afin de voir le codage ou le décodage binaire résultant par la méthode de la représentation biaisée. Vous pouvez également modifier la valeur du biais en cliquant sur les chiffres le composant.

Et croyez bien que ce n'est pas par pur sadisme que nous vous présentons ici cet autre codage des entiers signés, mais bel et bien parce que nous risquons fort de le croiser tantôt...

Bien ! Il est l'heure maintenant de récapituler nos rutilantes connaissances dans un tableau bien sexy (NR = valeur Non Représentable):

Codage binaire des entiers sur un octet
Base 10 Base 2 (numération binaire positionnelle) Codage signe-valeur absolue Codage par complément à 2 Codage par représentation biaisée (biais = 128)
> +255 NR NR NR NR
+255 11111111 NR NR NR
... ... NR NR NR
+127 01111111 01111111 01111111 11111111
+126 01111110 01111110 01111110 11111110
... ... ... ... ...
+2 00000010 00000010 00000010 10000010
+1 00000001 00000001 00000001 10000001
0 0000 0000 00000000
10000000
0000 0000 1000 0000
-1 NR 10000001 11111111 01111111
-2 NR 10000010 11111110 01111110
... NR ... ... ...
-126 NR 11111110 10000010 00000010
-127 NR 11111111 10000001 00000001
-128 NR NR 10000000 00000000
< -128 NR NR NR NR
Comment décodez-vous l'octet 10000001 en base 10 ?
-127
Certes. Mais pourquoi pas 129 en numération binaire positionnelle ?
-1
C'est vrai. Mais pourquoi pas +1 en représentation biaisée et biais égal à 128 ?
+1
Effectivement. Mais pourquoi pas -1 en représentation signe-valeur absolue ?
+129
Bien sûr, bien sûr. Mais pourquoi pas -127 en codage par complément à 2 ?
Aucune idée
Et vous faites rudement bien car il est foncièrement impossible de décoder un octet si l'on ignore le codage qui a servi pour le créer. En d'autres termes, un octet peut virtuellement coder n'importe quel entier ! C'est au processeur de connaître en permanence le type de codage qui a été utilisé pour coder les nombres qu'il manipule. En programmation, cela revient à typer les variables manipulées par le programme.

Codage de R (réels)

Un site chronaérostatique...c'est-à-dire un site où le temps semble suspendre son vol. pour vous faire découvrir les nombres dans leur infinie variété.

Bon, les entiers, c'est codé !
Puisque vous semblez en forme, nous pouvons nous atteler à un deuxième défi de taille, à savoir: comment représenter en binaire un nombre à virguleOui, c'est vrai que l'expression ne fait pas très rigoureux rigoureux... Mais l'auteur de cette page a décidé de rassembler sous ce même béotien vocable à la fois les nombres rationnels (Q) et les réels (R).
Puisse Mme Verduyn, sa vénérable professeur de Mathématiques de 6ème, lui pardonner...
, sachant qu'un processeur, décidément pas très fute-fute, ne pige pas non plus le symbole virgule ?

Virgule: A votre rang, fixe !

Quiproquo décimal

Le Français a beau être la plus belle des langues, il lui arrive parfois d'être déconcertant. Ainsi, le même adjectif "décimal" peut décrire tout autant un nombre exprimé en base 10 que la partie fractionnaire d'un nombre. Il est donc légitime, quoique un peu déstabilisant il est vrai, d'évoquer la partie décimale d'un nombre binaire dès lors que l'on fait référence aux bits situés après sa virgule.

Au risque de vous prendre pour de grands niais, rappelons qu'un nombre réel se compose de deux parties distinctes: une partie entière, située à gauche de la virgule, et, éventuellement, une partie décimale, située après celle-ci.

Pour ce qui est de la partie entière, nous savons désormais...enfin, nous l'espérons... parfaitement la coder. Mais quid de de la partie décimale ?

Et bien il nous suffit de reprendre le principe de la numération positionnelle, en considérant chaque bit situé après la virgule comme associé cette fois à des puissances négative de deux, tout comme nous le faisons pour la base 10.

Ainsi, pour reprendre notre petit exercice de décomposition déjà vu plus haut, nous savons que:

     5.022,78 = 5 x 1.000 + 0 x 100 + 2 x 10 + 2 x 1 + 7 x 0,1 + 8 x 0,01          ...ce qui revient à écrire:

     5.022,78 = 5 x 103 + 0 x 102 + 2 x 101 + 2 x 100 + 7 x 10-1 + 8 x 10-2

De la même manière, on pourra également écrire:

     10111,011 = 1 x 24 + 0 x 23 + 1 x 22 + 1 x 21 + 1 x 20 + 0 x 2-1 + 1 x 2-2 + 1 x 2-3          ...soit:

     10111,011 = 1 x 16 + 0 x 8 + 1 x 4 + 1 x 2 + 1 x 1 + 0 x 0,5 + 1 x 0,25 + 1 x 0,125

...c'est-à-dire 10111,0112 = 23,37510

Le problème, comme nous le disions il y a peu, reste le codage de la virgule. Impossible en effet de la symboliser par un bit, car comment par la suite reconnaître ce bit codant la virguleProblème que ne pose pas le codage du signe, par définition toujours placé au même endroit. parmi tous les bits composant le nombre proprement dit ?

Le seul moyen de procéder est pour la machine de convenir une fois pour toute d'une position immuable et tacite de la virgule.
Les réels codés selon cette méthode seront alors dits représentés en virgule fixe.

Numérations binaire et décimale des réels par virgule fixe

Cliquez sur les bits du nombre binaire et/ou les chiffres du nombre décimal afin d'en obtenir la conversion dans l'autre base de numération.
Comme nous le voyons ici, afin de coder en base 2 un nombre inférieur à 1, il suffit de multiplier par deux ce nombre, garder la partie entière obtenue (0 ou 1) puis recommencer avec la partie fractionnaire jusqu'à la précision voulue.

Dans ce cas de figure, la virgule fixe est supposée se trouver juste devant le premier bit; le plus petit réel codable correspond donc à l'octet 00000001 qui code la valeur 0,00390625 (soit 1/256) et le plus grand à l'octet 11111111, qui code la valeur 0,99609375 (soit 1/2 + 1/4 + 1/8 + 1/16 + 1/32 + 1/64 + 1/128 + 1/256).

Notez quand même que 256 combinaisons...soit le potentiel de codage d'un octet. s'avèrent un peu léger-léger afin de coder l'infinité des réels compris entre ces deux valeurs. La probabilité est donc immense qu'un réel ne puisse être exactement codé par huit petits bits. L'animation donne ici, pour chaque réel choisi, la valeur inférieure la plus proche pouvant être effectivement codée par l'octet.

Quel serait le plus grand réel décimal codable par un octet avec une virgule fixée en son milieu ?
1111,1111
Oui mais pas tout à fait. Ceci est le plus grand réel binaire codable par un octet et virgule fixée au milieu. Nous vous le demandions en base 10.
15
Heu, non. Huit bits et une virgule centrale, cela fait quatre bits pour coder la partie entière et quatre bits pour coder la partie décimale. Il est donc impossible que le plus grand réel codable soit un entier...
15,9375
Exact. Soit 23 + 22 + 21 + 20 + 2-1 + 2-2 + 2-3 + 2-4
Virgule fixe, immobilisation rentable ?

Imaginons que nous recherchions le meilleur format afin de coder nos réels positifs en binaire. Comme nous voulons pouvoir coder d'assez grands nombres avec une précision pas trop ridicule, nous optons pour un format sur quatre octets, avec une virgule fixe placée en plein milieu. 16 bits avant la virgule, donc, afin de pouvoir coder des parties entières jusqu'à 216Nombre impressionnant sur le papier, mais qui ne représente en fait que 65.53610 !, et 16 bits après la virgule, histoire de pouvoir calculer avec une précision de 2-16...tout aussi impressionnant mais qui équivaut en fait à une précision inférieure à 0,00001 !.

Outre le fait que ni l'étendue du codage ni sa précision ne s'avèrent totalement satisfaisantes, on se rend vite compte que, dès lors que l'on voudra coder de petits réels inférieurs à un...soit les seize premiers bits inutilisés ! ou de grands entiers...soit les seize derniers bits inutilisés !, le gâchis en bits est insupportable !

Fluctuat nec mergitur

Le flottement de la virgule au milieu des bits

De fait, les scientifiques utilisent une notation ingénieuse des réels à laquelle ils ont d'ailleurs modestement donné leur nom. Celle-ci consiste à écrire les nombres sous la forme:

(-1)signe . Mantisse . 10±Exposant

Cette notation, quoiqu'un chouia flippante, a néanmoins l'immense mérite de pouvoir représenter à la fois les très grands et les très petits nombres sans s'encombrer d'une floppée de zéros.

Les réels codés sous cette forme sont dits représentés en virgule flottante (floating point).

Mais pourquoi donc un si curieux épithète ?
Parce qu'avec cette notation, la virgule peut "flotter" tout au long de la mantisse, il suffit simplement d'ajuster l'exposant en conséquence.
Ainsi, par exemple:

     12647 = 12647.100 = 126,47.102 = 1264700.10-2

Et la virgule flotte tout aussi bien en binaire. La preuve:

     11001 = 11001.20 = 1,1001.24 = 1100100000.2-5

Bien entendu, la chose reste tout à fait possible en base 2. L'écriture devient alors:

(-1)signe . Mantisse . 2 ±Exposant

...où mantisse et exposant seront bien évidemment exprimés en binaire.

Et bien ne cherchez pas plus loin ! Voilà comment les processeurs s'y prennent pour représenter de manière convenable les réels. Avec, bien évidemment, quelques petites particularités toutes personnelles. Ainsi:

Bref, le codage binaire des réels tel que le pratique un ordinateur ressemble un petit peu à un vaste pot-pourri des différentes méthodes de codage que nous venons de voir.
En tout cas, vous ne serez pas surpris d'apprendre que la taille totale en bits de l'ensemble constitué par le bit de signe, la mantisse et l'exposant sera généralement un multiple d'octets.

L'infini en quelques bits

Voici peut-être le bon moment pour glisser sur cette page une petite animation d'aspect a priori hostile, mais qui va nous en apprendre beaucoup sur la représentation des réels en virgule flottante.
 

Domaines de représentation comparés des codages en virgules fixe et flottante sur un octet.

Cette animation permet de représenter les différentes valeurs codables pour chacune des deux méthodes de représentation binaire des réels: en virgule fixe (en haut) et en virgule flottante (en bas).

Pour la représentation en virgule fixe, vous pouvez décider de la position de la virgule en cliquant sur les différents bits de l'octet. Pour la représentation en virgule flottante, vous pouvez décider de la répartition des bits entre mantisse et exposant en procédant de la même manière. Pour chacune des configurations choisies, vous pouvez alors voir les différents réels codables sur un intervalle donné, ainsi que les valeurs minimales et maximale codables pour chaque méthode.

En cliquant entre les deux graphiques, vous pouvez modifier l'intervalle de représentation afin d'étudier plus en détail le comportement des deux méthodes sur des intervalles plus restreints ([0,1], [0,10], [0,100], [0,1000]) ou sur la totalité de l'intervalle représentable.

Comme vous le constaterez, nous avons omis ici de réserver un bit de l'octet pour le codage du signe, histoire de rester positif quoi qu'il arrive.

Après quelques minutes très ludiques passées à exploiter cette animation hollywoodienne, nous avons tous...mais si, mais si. remarqué quelques très intéressantes particularités:

IEEE-754: La virgule flottante n'est plus vague

Comme nous venons de le voir, le processeur dispose donc d'une méthode générale de codage des réels satisfaisante quoique forcément imparfaite. Ces imperfections, justement, sont directement liées aux nombres de bits alloués au codage de la mantisse et de l'exposant.
L'idéal, maintenant, serait qu'un réel codé sur un ordinateur corresponde au même réel sur l'ordinateur du bureau d'à côté...juste histoire de ne pas semer la panique à la NASA, chez Airbus et à l'INSEE... (renseignement pris, ça ne poserait finalement pas trop de problème dans ce dernier cas).

La virgule flottante standardisée

En 1985, un pas de géant est accompli vers l'harmonie et la paix entre les puces; la très sérieuse Institut des ingénieurs en génie électrique et électronique (Institute of Electrical and Electronic Engineers) rend la conclusion de ses longs travaux et propose une norme, poétiquement baptisée IEEE-754, afin de standardiser l'arithmétique en virgule flottante des ordinateurs de la planète.

Bien évidemment, le premier souci est de définir des formats normalisés de codage des réels. Parmi les formats retenus, deux connaîtront un certain succès: les formats simple précision et double précision, ci-dessous décrits:
 

Format simple précision Format double précision
Taille totale 32 bits (4 octets) 64 bits (8 octets)
Taille de l'exposant 8 bits 11 bits
BiaisLa formule est simple pour retrouver la valeur du biais pour chaque format: si l'exposant est codé sur n bits, le biais est égal à 2n-1 - 1. 127...soit 27 - 1 1.023...soit 210 - 1
Taille de la mantisse (sans le bit caché) 23 bits 52 bits
Plus grand entier codable (en valeur absolue) 3,4 1038 1,8 10308Valeur somme toute raisonnable quand on sait que le rapport de la masse de l'univers sur celui du proton est de l'ordre de 1078...
Plus petit entier codableMais nous verrons qu'il est possible de faire un petit effort supplémentaire sur ce point. (en valeur absolue) 1,2 10-38 2,2 10-308
Précision approximative ≈ 10-7 ≈ 10-15
Type de variable correspondante en langage C "float" "double"
Format IEEE-754 simple précision

Cliquez sur les bits du réel binaire et/ou les chiffres du réel décimal afin d'en constater le décodage/codage au format IEEE-754 simple précision.

Valeurs particulières

Au gré de vos clics sur la dernière animation, vous avez peut-être découvert de drôles de valeurs, plus ou moins mystérieuses, en particulier lorsque l'exposant est minimal (00000000) ou, au contraire, maximal (11111111).
C'est que, pour correctement fonctionner, la norme IEEE-754 a prévu certaines configurations particulières afin de coder quelques cas remarquables et autres monstruosités mathématiques:
 

Signe Exposant Mantisse
Signification
0 / 1 tous les bits à 0 tous les bits à 0
0 / 1 tous les bits à 0 tous les bits à 0
0 / 1 tous les bits à 1 tous les bits à 0
+∞ / -∞
Attention ! Ce terme est un peu trompeur car il pourrait indiquer que ces deux configurations ne codent que les résultats d'opérations improbables comme, par exemple, une division par zéro. En réalité, tout résultat d'opération donnant un nombre supérieur (en valeur absolue) au plus grand nombre représentable par le formatBref, un cas qui ressemble fort à un bon vieil overflow... sera également considéré comme infini, bien que mathématiquement parlant, il ne le soit pas.
0 / 1 tous les bits à 1 non nulle
Not A Number (NaN)
Terme assez explicite afin d'indiquer le résultat d'une opération aussi amusante que 0/0, √(-1) ou encore 0x∞.
Bref, un résultat plus métaphysique que mathématique...
Les nombres dénormalisés sont-ils des nombres comme les autres ?

Mais tout à fait ! Les nombres dénormalisés ont juste ceci de particulier, c'est que leur bit caché n'est pas égal à un, mais égal à zéro. D'où leur nom, puisqu'en contradiction avec notre règle de "normalisation" voulant que la mantisse débute toujours par un "1".

Les nombres dénormalisés ont été prévus afin de remédier à un petit problème engendré par la représentation en virgule flottante. Pour expliciter ceci plus facilement, nous allons inventer un nouveau format fantaisiste de codage des réels: le format "super-pauvre précision", doté de trois bits pour l'exposant et de trois bits pour la mantisse.

Ce format épousant les principes de la norme IEEE-754, la valeur du biais est de 3...soit 22 - 1 et le plus petit réel positif codable est donc 00010000 pour le bit de signe (+), 001 pour l'exposant minimal (la valeur 000 étant réservée pour le codage de zéro et des nombres dénormalisés) et 000 pour la mantisse, codant le nombre 1 de par l'existence du bit caché., soit 2-2. Illustrons sur un petit schéma les différents nombres représentables au voisinage de zéro:

Nombres dénormalisés au voisinage de zéro

Comme nous le constatons facilement, sans l'existence des nombres dénormalisés, aucune valeur ne se trouve représentable entre 0 et ±2-2, alors que huit valeurs sont codables entre 2-2 et 2-1, entre 2-1 et 20, etc... Il y a donc un trou béant entre la plus petite valeur représentable et la valeur zéro. Or, en plus d'être très disgrâcieux, ceci peut avoir des conséquences assez fâcheuses.

Imaginez un instant que nous ayions deux nombre x et y, si proches l'un de l'autre que, bien que différents, leur différence soit inférieure au plus petit réel codable, et, donc, arrondie à zéro. Si cette différence intervient comme dénominateur d'une division, catastrophe ! Le processeur perd pied et se réfugie illico derrière un infini. Grâce aux nombres dénormalisés, le plus petit réel codable dans notre format super-pauvre précision devient 0000001... soit 0 pour le bit de signe (+), 000 pour l'exposant minimal (nous trouvant ici dans la zone des nombres dénormalisés) et 001 pour la mantisse, codant le nombre binaire 0,001 de par l'existence du bit caché, égal ici à 0., c'est-à-dire 0,125.2-2. Or, si x et y sont reconnus par la machine comme des nombres différents, leur différence ne peut par conséquent pas être inférieure à cette valeur minimale: l'arrondi de cette différence ne peut donc plus être nul et les meubles sont sauvés.

Les chimistes, physiciens et autres gros consommateurs de nombres infinitésimaux peuvent respirer...

La numérisation des réels par quatre chemins

Comme nous l'avons déjà dit plus haut, de par le nombre infini de réels existants, la probabilité qu'un nombre puisse être codé très exactement par une machine est quasi nulle (0+, pourrait dire l'obsédé du IEEE-754). La probabilité est donc gigantesque que l'on soit forcé de procéder à une approximation afin de pouvoir représenter un réel, qui se trouvera dès lors comme qui dirait "arrondi".

Décidément fort bien faite, la norme IEEE-754 a également prévu cet état de fait et propose en ce sens quatre modes "d'arrondissement" des réels.
Ainsi, si l'on appelle "réels machine" les différents réels exactement codables par le format IEEE-754, on définit:

  • Arrondi vers +∞, noté Δ(x), retourne pour tout réel x le plus petit réel machine supérieur ou égal à x. Bref, un arrondi par excès en bonne et due forme,
  • Arrondi vers -∞, noté ∇(x), retourne pour tout réel x le plus petit réel machine inférieur ou égal à x. Bref, comme qui dirait un arrondi par défaut,
  • Arrondi vers zéro, noté Ζ(x), retourne Δ(x) pour les réels négatifs et ∇(x) pour les réels positifs,
  • Arrondi au plus près, noté o(x), retourne le réel machine le plus proche du réel à coder.
Les quatre modes d'arrondi définis par la norme IEEE-754

Cliquez sur la zone de clic afin de créer un réel au hasard et constater vers quel réel machine celui-ci sera "approximé" selon le mode d'arrondi choisi.

Notez une curiosité rigolotte avec l'arrondi au plus près: il est somme toute possible qu'un réel se trouve "à égale distance" de son arrondi par défaut et de son arrondi par excès. La norme prévoit alors que le réel soit arrondi au réel machine "pair" (c'est-à-dire celui dont le dernier chiffre significatif de la mantisse se termine par un "0").
Ouais... Pas si rigolo que ça finalement...

Bien évidemment, le choix du mode d'arrondi effectivement utilisé par le processeur reste à la seule portée du programmeur.
Pour les plus curieux(ses), un dossier très complet sur l'arithmétique en virgule flottante, les techniques d'arrondis et les calculs de précision.

En ce qui concerne ces modes d'arrondi, la norme IEEE-754 est intraitable sur un point: si deux réels x et y sont arrondis selon un mode déterminé, alors leur opération élémentaire (+, -, x, /) doit donner un résultat également arrondi selon ce même mode.
On parle dans ce cas - excusez l'oxymore - d'arrondi correct.

Exceptions et bits porte-drapeaux

Réduire la norme IEEE-754 à une simple quoique méritante entreprise de standardisation de la représentation des réels serait un peu injuste. Le but ultime du standard vise à ce que les processeurs puissent assurer de manière correcteBon, d'accord: à peu près correcte... et fiableBon, d'accord: à peu près fiable... tous les calculs possibles et imaginables.
En d'autres termes, il faut éviter tant qu'à faire ce peu qu'un processeur délivre en toute décontraction un résultat faux, ou se mette à pédaler dans le silicium en cherchant le résultat d'une division par zéro.

Plus binaire que bannière...

Drapeau, drapeau... Disons plutôt des bits, pour ne pas changer. Ces drapeaux sont en fait les différents bits d'un nombre stocké bien au chaud dans un registre. Lorsqu'une exception se produit, le bit correspondant a celle-ci "se hisse" à la valeur 1.
Bref, du binaire, comme d'habitude...

En ce sens, la norme IEEE-754 prévoit qu'après chaque calcul, certains "événements" particuliers (que nous appellerons exceptions), puissent être signalés au programmeur afin que celui-ci puisse intervenir en conséquence et ainsi ne pas perturber la bonne marche du programme.

D'un point de vue plus technique, ces exceptions sont "matérialisées" par des drapeaux ou flags que le programmeur se doit de périodiquement vérifier afin de s'assurer de la validité les calculs effectués par la machine.

Ces exceptions normalisées sont:

  • Opération invalide: conséquence d'un acte insensé comme une division du type ∞ / ∞ ou encore √(-1). Dans ce cas, le résultat prend la forme d'une configuration NaN;
  • Overflow, ou dépassement de capacité vers ± ∞, que nous connaissons déjà bien. Cette exception survient lorsque le résultat, en valeur absolue, est plus grand que le plus grand nombre représentable par le format en cours;
  • Underflow, ou, pour tenter une francisation, "sous-passement" de capacité. Cette exception survient lorsque le résultat, en valeur absolue, est plus petit que le plus petit réel machine normalisé;
  • Division par zéro: toujours problématique...
  • Résultat inexact...toujours sympa de la part du processeur de prendre la peine de nous le signaler...: survient, non pas quand le processeur s'est complètement planté dans ses calculs, mais quand le résultat ne peut être codé exactement et que la machine doit donc faire appel à un arrondi.

Bref, tout est prévu !

Ajoutons à la va-viteNous voyons bien que vous êtes sur le point de craquer..., pour simuler la perfection, que le standard IEEE-754 normalise également d'autres menus détails comme les conversions entre différents formats (simple et double précisions entre eux, réels - entiers, formats binaire et décimal...) ainsi que les comparaisons entre nombres (égalité, supérieur à, inférieur à...)

Et pour terminer en beauté, une petite citation en VO d'un des pères de l'arithmétique numérique:

It makes me nervous to fly an airplane since I know they are designed using floating-point arithmetic.
Anton Householder

Enfin bref...

Et voilà ! Nous disposons désormais d'une batterie de méthodes afin de coder en binaire n'importe quel réel imaginable.
Enfin presque... En effet, de par le nombre fixe de bits que l'ordinateur accorde à la représentation des nombres, des approximations sont inévitables, et pas seulement pour les nombres irrationnels.

Nous sommes néanmoins rassurés: un ordinateur pouvant convenablement manipuler des nombres, il pourra donc astucieusement nous servir de calculatrice.
Au prix qu'il coûte, c'est déjà ça...

Pour aller plus loin...

Feed-back: exprimez-vous !

Arcana est un site gratuitSa version payante ayant conduit trois comptables à la dépression.... De fait, vos messages chaleureux et enthousiastes constituent la principale motivation de son auteur à tenter de le faire vivre.
Néanmoins, toutes les vérités sont bonnes à dire et ce formulaire est donc également destiné à recevoir vos doléances et vos remarques, ainsi que vos questions, vos rapports de bugs, et, par dessus tout, vos précieux conseils et correctifs.

Merci.

Notes techniques

Ce site a été testé sous environnement Windows avec les deux navigateurs les plus populaires du moment, à savoir Internet Explorer 7 et Firefox 2.
Tout avait l'air de fonctionner à peu près.

Il est vrai qu'aucun effort supplémentaire de compatibilité avec d'autres navigateurs n'a été entrepris, le nirvana du cross-browsing réclamant tout à la fois une patience d'ange, une méticulosité d'horloger et, paramètre non négligeable, un certain bol de cocu, toutes qualités dont ne dispose pas l'auteur de ce site.

Afin que Arcana puisse à peu près correctement fonctionner sur votre machine, votre navigateur doit autoriser l'exécution des scripts JavaScript et également disposer du plugin Adobe FlashPlayer.

En effet, la plupart des somptueuses animations disséminées sur ce site ont été réalisées avec le logiciel Adobe Flash©. Télécharger FlashPlayer Si votre ordinateur ne dispose pas du petit programme permettant de lire ce format, vous ne pourrez visualiser ces animations.
Heureusement, il vous suffit pour remédier à cette terrible injustice de cliquer sur ce logo ci-contre afin de télécharger le "plugin" qui vous permettra de découvrir enfin ces petits chefs-d'oeuvre d'art naïf (ainsi que, par la suite, toute page Internet recourant à cette technologie).
La procédure est indolore, rapide et gratuite, alors pourquoi s'en priver, je vous le demande ?

Arcana recherche...

Quoique l'auteur de ce site dispose d'une petite expérience et d'un nanodiplôme en sciences informatiques, il n'est malheureusement titulaire d'aucun permis d'enseigner validé par l'Académie. Dès lors, et bien que tout ait été mis en oeuvre afin de ne pas propager de trop grossières erreurs sur ces pages, il manque à Arcana ce qui lui donnerait tout à la fois poids et respectabilité, à savoir une autorité scientifique, auréolée d'un cursus en règle et du crédit de l'Université.
Si une ou plusieurs sommités venant à croiser ce site acceptaient d'endosser cette écrasante responsabilité de caution intellectuelle pour une ou plusieurs leçons, elles seraient grandement remerciées et leur nom bien évidemment gravé en lettres d'or en tête de page, leur assurant par là même gloire et renommée quasi planétaires.

Un sens du dépouillement et d'humilité artistique qui confine au déprimant...Par ailleurs, les spécialistes l'auront remarqué, Arcana se pare d'un graphisme rococo et luxuriant directement inspiré par l'école est-allemande des années 70.
De fait, quiconque n'a jamais eu à concevoir ex nihilo un simple bouton d'interface ne peut comprendre à quel point l'infographie est un métier à part entière. L'auteur de ce site ayant, suite à un très long face-à-face avec Photoshop, découvert son absence totale de don dans ce domaine très artistique, toute aide serait la bienvenue pour offrir à Arcana une charte graphique digne de ce nom.

De la même manière, quelques laborieux petits dessins pseudo-humoristiques viennent ça et là agrémenter le contenu parfois franchement hostile de certaines leçons. Si, vous aussi, vous tenez à participer à cette courageuse entreprise de dépénibilisation de l'écrit pédagogique, vos bulles originales seront les bienvenues et, légitimement signées, contribueront au fantastique rayonnement humaniste et artistique d'Arcana.

D'avance, merci.

Plan de la leçon