Hollie Little Pink Laptop.jpg
Garçon devant un ordinateur.jpg

Le Livre d'or  • avoir tout Vikidia hors-connexion

Participez à améliorer Vikidia : Pilpay, L'Île au trésor, Sorgho, Chasseur-cueilleur, et 300 autres articles importants et trop courts à compléter. Vos contributions sont les bienvenues !

Bug de l'an 2000

Une page de Vikidia, l’encyclopédie junior
Aller à la navigation Aller à la recherche
Panneau numérique : « Bienvenue à l'école centrale de Nantes, 12 heures 09, 3 janvier 1900 »
Exemple banal du bug : le panneau indique 1900 au lieu de 2000.

Le bug de l'an 2000 était l'idée que, le 1er janvier 2000 à minuit, un bug informatique allait causer des problèmes dans de nombreux programmes (banques, administration, etc.), menant peut-être à une catastrophe.

Finalement, il ne s'est pratiquement rien passé : le problème avait été prévu assez à l'avance pour que la plupart des programmes affectés soient mis à jour avant l'an 2000.

Causes[modifier | modifier le wikicode]

Encodage des années avec seulement deux chiffres[modifier | modifier le wikicode]

Illustration du problème de dépassement d'entier (wp) : quand le nombre de chiffres disponibles pour représenter un nombre est insuffisant, le nombre « boucle » et repasse à zéro. Ici, la jauge ne peut représenter que les nombres de 0 à 999999, donc 999999 + 1 = 0.

Dans les années 1960 et 1970, l'informatique se répand dans les entreprises mais utilise encore des machines avec peu de mémoire, voire des cartes perforées. Sur ces supports, chaque bit de mémoire est précieux, et donc les programmeurs écrivent souvent les dates avec seulement les deux derniers chiffres de l'année : par exemple, 1971 était stocké sous la forme de « 71 », comme quand on dit « les années 70 ».

En utilisant ce format dans leur code source, beaucoup de programmeurs n'imaginaient pas qu'il serait toujours utilisé par des programmes plus de 20 ans après. Dans le format à deux chiffres, les années 2000 sont représentées par 00, 01, etc. Les ordinateurs comparent les dates comme des nombres, donc pour ces programmes, les années (20)00 sont plus anciennes que les années (19)90, ce qui pose problème.

Par exemple, imaginons qu'on soit le 2 janvier 2000. Un algorithme habituel pour calculer l'âge d'une personne à partir de sa date de naissance du 3 août 1991 est :

  1. Calculer la différence entre les années courante et de naissance : 2000 - 1991 = 9, mais (avec les années à deux chiffres) 00 - 91 = -91.
  2. Comparer les mois courant et de naissance comme des nombres : janvier (1) est plus « petit » qu'août (8) donc on enlève une année au total (l'anniversaire n'est pas encore arrivé).

Avec les années écrites sur quatre chiffres, on obtient la bonne réponse (8 ans) ; mais avec les années à deux chiffres, on obtient -92, que le programme pourrait aussi interpréter comme 0 (si les nombres négatifs sont tronqués) ou un nombre absurde comme 4294967204 (par exemple en cas de dépassement d'entier (wp)). Cela peut sembler inoffensif pour le calcul de l'âge d'une personne, mais un problème similaire (non lié aux dates à deux chiffres) a déjà causé l'explosion d'une fusée.1

Année bissextile[modifier | modifier le wikicode]

Une autre source d'inquiétude pour le passage à l'an 2000 était le fait que certains programmes supportaient seulement en partie les années bissextiles. Par définition, une année bissextile est une année :

  • soit qu'on peut diviser par 4 mais pas par 100 ;
  • soit qu'on peut diviser par 400.

Certains programmes ignoraient la règle de divisibilité par 400, ce qui les faisaient considérer l'an 2000 comme non-bissextil (2000 est divisible par 4 et par 100) alors qu'il est bissextil (2000 est aussi divisible par 400).

Se tromper sur le fait qu'une année est bissextile ou non revient à considérer qu'elle a un nombre incorrect de jours, car les années bissextiles sont les seules à avoir un 29 février.

Références[modifier | modifier le wikicode]

  1. Le 4 juin 1996. Source : (en) Rapport de la Commission d'enquête Ariane 501, section 2.1 : « L'erreur du logiciel SRI a été causée par la conversion d'un nombre décimal de 64 bits en un nombre entier relatif de 16 bits. Le nombre décimal converti avait une valeur plus grande que ce qui pouvait être représenté par un entier relatif de 16 bits. »
Portail de l'informatique —  Tous les articles sur son histoire, les logiciels, Internet…