Médaille
N°1 pour apprendre & réviser du collège au lycée.
Une machine électronique

Déjà plus de

1 million

d'inscrits !

0/3
0 / 15
Challenge tes acquis !
Remporte un max d’étoiles
et de school coins !
`

Introduction :

Dans ce cours, nous continuons notre histoire de l’informatique par l’appartition des premiers ordinateurs électroniques, dont nous allons voir le rôle qu’ils ont joué pendant la Seconde Guerre Mondiale. Ce sera l’occasion d’étudier l’ordinateur moderne sous son aspect le plus physique : son aspect électronique. Nous allons aussi continuer à étudier la représentation binaire des données en nous intéressant aux nombres réels et aux textes.

La première génération

Les débuts

Dans les années 1930, les mathématiciens progressent dans la compréhension et la théorisation du calcul automatique.
Le Britannique Alan Turing, notamment, fournit la première description théorique de ce que fait, mathématiquement, une machine à calculer programmable. Pour ces travaux, il est considéré comme l’un des fondateurs, si ce n’est le fondateur, de la science informatique.
D’un point de vue technique, les progrès en électronique permettent la conception des premières machines à programmer automatiques utilisant les propriétés de l’électricité.

bannière à retenir

À retenir

On considère parfois que la première génération d’ordinateurs est celle des calculateurs électromécaniques (\approx 1940-1955), c’est-à-dire composés à la fois d’éléments électriques et mécaniques (valves, tubes à vide, etc.).

C’est notamment pendant la Seconde Guerre Mondiale, et pour des applications militaires, que nombre de ces machines furent développées.

Machines de guerre

En Allemagne, l’ingénieur allemand Konrad Zuse conçoit la machine Z2, qui servit aux calculs nécessaires au guidage des missiles de la Wermarcht. Plus tard, Zuse développera des modèles civils, les Z3 et Z4.
En Angleterre, c’est pour la cryptanalyse, c’est-à-dire le décryptage des codes secrets, que le renseignement britannique développèrent des calculateurs électromécaniques appelées “bombes”, comme la célèbre Colossus.

Colossus Colossus, la plus imposante des "bombes" britanniques (image des Archives Nationales Britanniques, domaine public)

Les cryptanalystes britanniques (les casseurs de codes secrets) de l’équipe de Bletchley Park, dont le fameux Alan Turing, ont joué un rôle essentiel dans le renseignement allié, qui sera tenu secret pendant des décennies.

L’ENIAC est l‘équivalent américain de ces projets. Conçu pour réaliser des calculs ballistiques, il ne sera terminé qu’après la guerre. À sa conception, l’ENIAC est le calculateur le plus puissant au monde, et de loin. Mais cette prouesse est plus due à ses dimensions (il pèse 30 tonnes et occupe la surface d‘un terrain de volley-ball) qu’à la qualité de sa conception (par exemple, il utilise encore le décimal au lieu du binaire).

ENIAC L’ENIAC (Electronic Numerical Integrator and Computer)in Philadelphia, Pennsylvania domaine public.

Un entretien coûteux

Les calculateurs électromécaniques sont des machines qui requièrent toute une équipe pour leur usage et leur entretien.

D’abord, à cause de la fragilité des composants mécaniques : les tubes à vide peuvent éclater si un insecte s’introduit dedans (ce qui est l’origine du mot bug), il faut alors trouver quel tube est cassé parmi les milliers de l’appareil et le changer. Ensuite, parce que le passage des instructions à la machine est une procédure fastidieuse, qui demande souvent de recabler la machine à plusieurs endroits.

Les réels en binaire

Pour calculer, par exemple, des trajectoires de missiles, il ne suffit plus de savoir réaliser des opérations sur les nombres entiers. Nous allons voir dans cette partie comme représenter en binaire des nombres réels.

Codage en virgule fixe

bannière definition

Définition

Codage en virgule fixe :

Le codage binaire d’un nombre réel est dit en virgule fixe si l’on attribue pour ce codage deux paquets de bits : un pour les nombres avant la virgule, un pour les nombres après la virgule.

Dans un codage en virgule fixe, la partie entière (les nombres avant la virgule) est codée comme un nombre entier, voire un entier relatif. En revanche, il ne serait pas du tout pratique de coder ainsi les nombres après la virgule.
Par exemple, comme avec un octet, on peut représenter les nombres de 00 à 255255, si l’on utilisant un octet pour coder les nombres après la virgule comme un nombre entier, on pourrait coder 12,00512,005 ou 12,13712,137 mais pas 12,912,9 ou 12,56112,561.
Voilà pourquoi on utilise une autre convention.

bannière propriete

Propriété

Dans le codage binaire en virgule fixe, chaque bit après la virgule code l’inverse d’une puissance de 22.

44 22 11 . 12\dfrac{1}{2} 14\dfrac{1}{4} 18\dfrac{1}{8} 116\dfrac{1}{16} 132\dfrac{1}{32} 164\dfrac{1}{64}

C’est, au final, la même chose que ce qui se fait en décimal, où chaque nombre après la virgule code l’inverse d’une puissance de 1010 (les dixièmes, centièmes, millièmes…).
Voici des nombres réels codés en virgule fixe avec un octet de chaque côté de la virgule :

01011010100000000101\,1010\,1000\,0000 90+12=154,590 + \dfrac{1}{2} = 154,5
00011111101000000001\,1111\,1010\,0000 31+12+18=31,62531 + \dfrac{1}{2} + \dfrac{1}{8} = 31,625
00000000000000010000\,0000\,0000\,0001 0+1128=0,00781250 + \dfrac{1}{128} = 0,0078125
00000011111111110000\,0011\,1111\,1111 3+12++1128=0,99218753 + \dfrac{1}{2} + … + \dfrac{1}{128} = 0,9921875
bannière propriete

Propriété

Dans un codage en virgule fixe, la précision possible est définie par le nombre de bits après la virgule.

Codage en virgule flottante

Dans ses machines civiles comme militaires, l’ingénieur allemand Konrad Zuse introduit une nouvelle manière de représenter les nombres réels, le codage en virgule flottante, qui deviendra la représentation la plus utilisée de nos jours.

bannière definition

Définition

Codage en virgule flottante :

Dans un codage en virgule flottante d’un nombre réel, le nombre est représenté par trois éléments :

  • un bit de signe (00 positif, 11 négatif) ;
  • un nombre entier, appelé mantisse, exprimée dans une base donnée ;
  • et un autre entier, l’exposant, indiquant à quelle place la virgule doit être placée dans la mantisse pour donner le nombre réel.

En d’autres termes, le nombre sera égal à : signe×mantisse×baseexposant\text{signe}\,\times\,\text{mantisse}\,\times\,\text{base}^{\text{exposant}}

bannière exemple

Exemple

Prenons l’exemple d’un codage décimal d’un nombre réel en virgule flottante : si j’ai un bit de signe positif, une mantisse égale à 81642518\,164\,251 et un exposant de 55, alors mon nombre vaut :
8164251×105=81,642518\,164\,251\times10^{-5} = 81,64251
Si mon exposant vaut 33, alors mon nombre est de :
8164251×103=8164,2518\,164\,251\times10^{-3} = 8164,251

En pratique, dans un ordinateur, le codage n’est pas décimal mais est la plupart du temps binaire.

  • Le fonctionnement est le même que le codage en virgule fixe (chaque nombre après la virgule est l’inverse d’une puissance de 22), à ceci près que l’exposant indique où se trouve réellement la virgule.

Lorsque l’on choisit de faire des calculs sur les réels, il faut donc faire un certain nombre de choix :

  • soit virgule fixe et, quand c’est le cas, où placer la virgule ?
  • soit virgule flottante et, quand c’est le cas, combien de bits pour l’exposant ?

Chacun de ces choix peut avoir sa pertinence :

  • quand on connaît l’ordre de grandeur des entiers sur lesquels on va travailler, la virgule fixe est meilleure que la virgule flottante, puisque aucun bit n’est utilisé pour placer l’exposant ;
  • quand on ne connaît pas l’ordre de grandeur, la virgule flottante sera plus sûre car elle permettra de meilleures possibilités : les flottants permettent à la fois de coder des nombres très grands (mais avec peu de précision après la virgule) et des nombres très petits.
bannière definition

Définition

Nombre flottant :

On appelle nombre flottant ou flottant (float) un nombre réel exprimé en virgule flottante.

Le problème de l’arrondi

Un autre problème provient de la propriété suivante :

bannière propriete

Propriété

Il y a moins de fractions qui « tombent juste » dans le système binaire que de fractions qui « tombent juste » dans le système décimal.

bannière exemple

Exemple

  • 110\dfrac{1}{10} en décimal : 0,10,1
  • 110\dfrac{1}{10} en binaire : 0,1100110011001100,110\,0110\,0110\,0110…

Pour donner un ordre de grandeur, voici le début de la liste des nombres qui tombent juste en binaire, classés par le nombre de chiffres nécessaire pour les exprimer en décimal :

0,50,25;0,750,125;0,375;0,525;0,875...\begin{aligned} 0&,5 \ 0,25\,&;\,0,75 \ 0,125\,;\,0,375\,&;\,0,525\,;\,0,875 \ .&.. \end{aligned}

En conséquence, il est très, très souvent nécessaire d’arrondir les nombres qui sont exprimés en virgule fixe ou flottante.

bannière exemple

Exemple

On peut arrondir 110\dfrac{1}{10} par

0,110011001100110011001100,110\,0110\,0110\,0110\,0110\,0110 ; ce qui, en décimal, n’est pas égal à 0,10,1, mais à

0,1000000014901161193847656250,100\,0000\,0149\,0116\,1193\,8476\,5625.

Pour cette raison, il faut absolument éviter de tester l’égalité de deux nombres exprimés en virgule fixe ou en virgule flottante.

bannière exemple

Exemple

Par exemple, cette expression booléene a toutes les chances de valoir « faux » dans un programme informatique :
0,1+0,1+0,1+0,1+0,1=0,50,1 + 0,1 + 0,1 + 0,1 + 0,1 = 0,5

La norme IEE 754

Jusque dans les années 1980, chaque fabricant d’appareils informatiques possédait ses propres normes sur la représentation des nombres réels en virgule flottante (combien de bits accorder à chaque valeur, comment gérer le signe du nombre, comment faire les arrondis, etc.), ce qui compliquait beaucoup la tâche des informaticiens.

bannière propriete

Propriété

La norme IEE 754 définit un certain nombre de formats standards pour la représentation des nombres flottants. Aujourd’hui, la majorité des langages de programmation et des unités de calcul en nombre flottant utilisent des formats issus de cette norme.

Il y a encore d’autres façons de représenter les réels que les virgules fixes et les virgules flottantes (le calcul formel, la forme rationnelle, le système de nombres logarithmiques, etc.), mais elles ne sont pas étudiées dans ce cours.

Coder des caractères alphabétiques

Une question de standardisation

Représenter des caractères alphabétiques en binaire est, a priori, une affaire bien plus simple : il suffit de se mettre d’accord sur une norme qui assigne un caractère spécifique à une chaîne de bits donnée.

En pratique, la tâche s’avère plus compliquée que cela, notamment à cause de la question du nombre de bits utilisés par caractère : plus ce nombre est élevé, plus il est possible de représenter des caractères différents, mais plus chaque caractère prend de la place en mémoire, ou dans une télécommunication.

Jusque dans les années 1960, chaque matériel informatique possédait son propre format, et les appareils informatiques étaient souvent fournis avec des programmes et des tables de correspondance permettant de traduire les formats d’un appareil à un autre.

Un effort de standardisation a été fait à partir des années 1960, mais, comme nous allons le voir, plusieurs formats différents existent encore à l’heure actuelle, chacun possédant des avantages et des inconvénients sur les autres.

Trois formats standards

bannière definition

Définition

ASCII :

Le format ASCII (American Standard Code for Information Interchange) a été conçu dans les années 1960. Chaque caractère est codé sur 77 bits, il y a donc 128128 caractères disponibles.

Ce code a été prévu pour écrire l’anglais tel que parlé aux États-Unis, il manque donc de nombreux caractères utilisés dans d’autres langues, comme le tréma ( ¨ ). Le dollar ($\text{\textdollar}) est un caractère présent, mais il n’y a aucun autre symbole monétaire (ni l’euro, € ni la livre £\pounds).

table ASCII La table ASCII extraite d'un manuel d'imprimante de 1972, domaine public.


Un caractère de contrôle est un « caractère » codé par une norme qui n’en est pas vraiment une, mais qui est plutôt une indication qui peut s’avèrer utile dans la présentation du texte comme « début de texte », « passage à la ligne » ou « fin de texte ».
La table ASCII comporte 3333 caractères de contrôle.

Lettres En base 2
A 1 0 0 0 0 0 1
B 1 0 0 0 0 1 0
C 1 0 0 0 0 1 1
D 1 0 0 0 1 0 0
E 1 0 0 0 1 0 1
F 1 0 0 0 1 1 0
G 1 0 0 0 1 1 1
H 1 0 0 1 0 0 0
I 1 0 0 1 0 0 1
J 1 0 0 1 1 0 0
K 1 0 0 1 0 1 1
L 1 0 0 1 1 0 0
M 1 0 0 1 1 0 1
N 1 0 0 1 1 1 0
O 1 0 0 1 1 1 1
P 1 0 1 0 0 0 0
Q 1 0 1 0 0 0 1
R 1 0 1 0 0 1 0
S 1 0 1 0 0 1 1
T 1 0 1 0 1 0 0
U 1 0 1 0 1 0 1
V 1 0 1 0 1 1 0
W 1 0 1 0 1 1 1
X 1 0 1 1 0 0 0
Y 1 0 1 1 0 0 1
Z 1 0 1 1 0 1 0
bannière definition

Définition

ISO-8859 :

Le format ISO-8859 commence à être utilisé dans les années 80. Il s’agit d’une extension de l’ASCII sur 88 bits au lieu de 77 (il y a donc deux fois plus de caractères disponibles, soit 128128 nouveaux caractères).

Le format ISO-8859 existe en plusieurs versions, chacune d’entre elles possédant un ensemble différent de caractères supplémentaires par rapport à l’ASCII. Ces différentes versions ne sont qu’en partie compatibles les unes avec les autres.

bannière à retenir

À retenir

Le plus utilisé (et le plus utile pour écrire en français) est sans doute le format Latin-1, ou ISO-8859-1, qui introduit les caractères les plus couramment utilisés dans les langues d’Europe de l’Ouest.

bannière definition

Définition

Unicode :

Unicode a été créé pour réunir dans un seul format l’ensemble des caractères utilisables dans toutes les langues du monde.

Le format d’Unicode le plus célèbre est UTF-8. Il utilise un nombre de bits par caractère qui dépend du caractère : les caractères courants, ceux de l’ASCII, sont codés sur 8 bits (un octet), certains caractères plus rares sont codés sur 4 octets. UTF-16 et UTF-32 sont deux autres formats célèbres. Ils sont bien plus lourds, mais contiennent bien plus de caractères.

bannière exemple

Exemple

Par exemple, dans UTF-32, tous les caractères sont codés sur 4 octets. Un texte ne comportant que des caractères ASCII sera donc quatre fois plus lourd en UTF-32 qu’en UTF-8, mais par contre, le format UTF-32 comporte vraiment beaucoup de caractères (les caractères occidentaux, cyrilliques, chinois, japonais… même les hiéroglyphes égyptiens).

Des usages différenciés

  • La norme ASCII est la plus utilisée pour la programmation informatique. En effet, les codes des programmes informatiques sont souvent pensés pour privilégier la fiabilité et l’efficacité au confort de lecture, et la norme ASCII est la plus ancienne. De plus, toutes les autres normes sont compatibles avec elle, et le code ASCII est celui qui prend le moins de place en mémoire.
  • La norme ISO-8859 est la plus utilisée pour les documents textes (.pdf, .txt, .doc, .odt). Pour les documents textes, chaque document n’a besoin que de signaler dans les métadonnées le type de format ISO-8859 utilisé dans le document, ce qui permet au lecteur d’utiliser la table de caractères adéquate pour lire le texte. On s’attend à ce que quelqu’un qui veuille lire ou écrire un texte en hongrois ou en portugais dispose de logiciels qui lisent le format correspondant.
  • La norme UTF-8 est la plus utilisée sur le World Wide Web (plus de 92%92\,\% des sites Web). Enfin, sur Internet, la possibilité d’être lu et compris par le plus grand nombre est essentielle, et le format UTF-8 permet de s’assurer que des personnes venant d’un peu partout autour du globe pourront communiquer avec le même code dans les commentaires d’une page web ou sur un réseau social.

Conclusion :

En devenant capable de traiter des problèmes complexes et proches d’enjeux réels, les calculateurs électromécaniques deviennent des enjeux technologiques et scientifiques importants. Mais ces machines sont encore trop énormes, et demandent trop d’entretien, pour pouvoir être utilisées en-dehors de contextes très spécifiques.

Au sortir de la Seconde Guerre Mondiale, des avancées techniques vont permettre de passer du calculateur électromécanique à l’ordinateur électronique – c’est ce que nous verrons dans le prochain cours.