MathLvl
Question transversaleMathsNSIReprésenter l'information

Pourquoi certains ordinateurs risquent-ils de croire que nous sommes en 1901 le 19 janvier 2038 ?

Unix compte les secondes depuis le 1ᵉʳ janvier 1970. Sur un entier signé de 32 bits, le maximum 2³¹ − 1 = 2 147 483 647 secondes est atteint le 19 janvier 2038 à 3 h 14 min 7 s (UTC) ; une seconde plus tard, le compteur passe à −2³¹, c'est-à-dire le 13 décembre 1901.

Grand oral session 2027 : exposé de 10 minutes debout, puis 10 minutes d'échange, sans calculatrice. Plan prévu pour 9,5 min.

Pourquoi cette question : un modèle d'introduction

Le jury attend que vous expliquiez pourquoi vous avez choisi la question. Inspirez-vous de ce modèle, mais racontez votre propre parcours.

J'ai entendu parler du « bug de l'an 2000 » par mes parents, puis j'ai découvert qu'un autre bug était annoncé pour 2038. Il m'a semblé étonnant qu'on puisse prédire une panne à la seconde près, plus de dix ans à l'avance. C'est un calcul de puissance de 2 et de conversion d'unités que j'ai voulu refaire moi-même.

L'enjeu et les notions du programme

Combiner puissances de 2, conversions d'unités et complément à deux pour dater exactement un dépassement de capacité.

Mathématiques

  • Puissances, ordres de grandeur (seconde)
  • Conversions d'unités, proportionnalité (seconde)
  • Calcul sur les restes, division euclidienne (seconde)

Numérique et sciences informatiques

  • Entiers relatifs en complément à deux, dépassement (première)
  • Systèmes d'exploitation, horodatage (terminale)

Le plan de l'exposé en 9,5 min

  1. 1. Introduction

    1 min

    Les systèmes Unix (Linux, Android, macOS) mesurent le temps en secondes écoulées depuis le 1ᵉʳ janvier 1970 à minuit (UTC). Problématique : jusqu'à quand ce compteur fonctionne-t-il s'il est rangé sur 32 bits ?

  2. 2. Mathématiques : quand le compteur déborde

    4 min

    Un entier signé sur 32 bits va de -2³¹ à 2³¹-1=2 147 483 647. Convertissons en années : une année moyenne dure 365,25×86 400=31 557 600 secondes, donc (2³¹-1)/(31 557 600)≈68,05 ans. On tombe début 2038.

    Le calcul exact (en comptant les années bissextiles) donne le 19 janvier 2038 à 3 h 14 min 7 s UTC. La seconde suivante, le compteur vaudrait 2³¹, qui n'est pas représentable : en complément à deux, le motif correspond à -2³¹.

    Or -2³¹ secondes avant 1970 nous ramène environ 68 ans en arrière : le 13 décembre 1901 à 20 h 45 min 52 s. Un système non corrigé croira donc avoir reculé de 136 ans.

  3. 3. NSI : prévenir le bug

    3 min

    La solution consiste à passer le compteur sur 64 bits : la limite devient 2⁶³-1 secondes, environ 292 milliards d'années, vingt fois l'âge de l'Univers. Les systèmes récents l'ont fait, mais beaucoup d'appareils embarqués (automates, voitures, objets connectés) et de vieux formats de fichiers gardent 32 bits.

    Le bug montre l'importance de choisir un type de données en anticipant toute la durée de vie d'un programme. Le bug de l'an 2000 venait d'un autre choix de représentation : les années stockées sur deux chiffres décimaux.

  4. 4. Conclusion

    1,5 min

    Le bug de 2038 se prédit à la seconde par un simple calcul : 2³¹-1 secondes après 1970. Le passage à 64 bits repousse la limite de 68 ans à 292 milliards d'années, car doubler le nombre de bits élève la capacité au carré. J'ouvre sur l'interprétation non signée, qui repousserait la limite à 2106.

Ce que j'écris au tableau

Pas de calculatrice ni de support numérique : un calcul clé écrit au tableau rend l'exposé concret et montre la solidité des connaissances.

2³¹-1=2 147 483 647 s (2³¹-1)/(365,25×86 400)≈68,05 ans
1970+68≈2038 2³¹ longmapsto -2³¹ ⇒ 1901

Conclusion : la réponse à la question

Un compteur de taille fixe a une date de fin calculable. Le bug de 2038 combine puissance de 2, conversion d'unités et complément à deux : un parfait exemple de mathématiques au service de la prévention.

Les questions probables du jury

Pendant les 10 minutesd'échange, le jury vous fait préciser et approfondir, sur tout le programme de vos spécialités en lien avec la question.

Combien de secondes dans une journée ?

24×3600=86 400.

Pourquoi diviser par 365,25 ?

Pour tenir compte en moyenne d'une année bissextile tous les quatre ans.

Avec un entier non signé de 32 bits, quand serait la limite ?

2³²-1 secondes, environ 136 ans : en février 2106.

Pourquoi 64 bits donnent-ils une limite si lointaine ?

2⁶³=(2³¹)²×2 environ : doubler le nombre de bits élève la capacité au carré.

Comment obtenir l'heure Unix en Python ?

Avec time.time(), qui renvoie le nombre de secondes depuis le 1ᵉʳ janvier 1970.

Les pièges qui coûtent des points

  • Oublier que l'entier est signé : la limite est 2³¹ − 1, pas 2³² − 1.
  • Oublier les années bissextiles dans la conversion.
  • Croire que le bug touche tous les ordinateurs : seulement ceux qui gardent 32 bits.

Revoir les notions

Autres questions : représenter l'information

Toutes les questions maths-nsi →

Préparer l'oral, pas seulement le contenu

Gestion des 20 minutes de préparation, usage du tableau, posture debout, réponses au jury : la méthode complète, conforme aux règles de la session 2027.

Méthode : traiter une question de Grand oral →