Je suis Charlie

Autres trucs

Accueil

Seulement les RFC

Seulement les fiches de lecture

Ève

Fiche de lecture : Calendrical calculations

Auteur(s) du livre : Edward Reingold, Nachum Dershowitz
Éditeur : Cambridge University Press
0-521-77752-6
Publié en 2000
Première rédaction de cet article le 6 février 2008


Le moindre téléphone portable, aujourd'hui, beaucoup de sites Web (réservations de train ou d'avion), de nombreux autres logiciels, disposent de fonctions de calendrier. Les nombreuses bogues constatées dans ces logiciels montrent que des questions aussi simples que « Le 1er mars 2000 est-il un mardi ou un mercredi ? » ne sont pas si triviales qu'elle en ont l'air. Ce livre est l'ouvrage de référence sur les calculs calendaires, pour de nombreux calendriers existants ou disparus, avec tous les détails nécessaires pour programmer soi-même ces calculs.

Les auteurs sont deux experts, Nachum Dershowitz a écrit de nombreux articles sur le sujet et Edward Reingold est le mainteneur du paquetage calendar d'Emacs. L'ampleur de l'érudition nécessaire pour couvrir, non seulement le traditionnel calendrier grégorien mais aussi les calendriers chinois, hindou, musulman, maya et bien d'autres, est impressionnante. Les amateurs d'anecdotes seront ravis. Par exemple, ils apprendront que les chinois incrémentent l'âge des enfants, non pas à leur anniversaire, mais au nouvel an. De plus, un enfant a un an à sa naissance. S'il nait la veille du nouvel an chinois, il aura deux ans au bout de quelques jours de vie. Autre exemple amusant, dans le calendrier maya Tzolkin, les numéros des jours et ceux des « mois » varient ensemble, mais sur des cycles de taille différentes. Ainsi, le 1 Imix est suivi du 2 Ik, lui-même suivi du 3 Akbal, etc jusqu'au 13 Ben (le cycle des jours a une longueur 13) qui est suivi du 1 Ix...

Mais la variété des calendriers permet aussi de philosopher sur le nombre de solutions possibles à un problème donné. Vivant sur la même Terre, avec les mêmes alternances de jour et de nuit et le même parcours du Soleil et de la Lune, les différentes civilisations ont développé des calendriers très différents. Il y en a deux grandes familles : les calendriers arithmétiques et les calendriers astronomiques. Les premiers obéissent à des règles arithmétiques simples (les seules opérations nécessaires pour les mettre en œuvre sont les quatre opérations de base, plus la fonction partie entière) et sont donc les plus simples à programmer. Mais, ignorant des cycles astronomiques et utilisant leurs propres cycles, incommensurables avec ceux des astres, il sont voués à un décalage grandissant avec le temps. C'est ainsi que notre calendrier grégorien, archétype des calendriers arithmétiques, a remplacé le calendrier julien, devenu trop décalé. Et il devra à son tour être réformé ou remplacé.

Les européens ne sont pas les seuls à avoir conçu un calendrier arithmétiques. Les Mayas ou les musulmans l'ont également fait. Mais d'autres peuples ont choisi une voie différente, notamment les chinois avec un calendrier astronomique, c'est-à-dire où le passage d'une période à une autre (par exemple d'un mois au suivant) dépend d'un événement astronomique (la nouvelle Lune dans le cas chinois). Ainsi, le calendrier est toujours synchronisé avec les astres. En revanche, si on veut calculer des dates futures, pour lesquelles il n'est pas encore possible de faire des observations astronomiques, les calculs sont nettement plus compliqués (rien n'est simple en astronomie, même la durée du jour diminue avec le temps). (Les hindous ont également un calendrier astronomique.)

Il existe aussi des calendriers qui ont emprunté aux deux systèmes. Par exemple, le calendrier civil musulman est arithmétique, mais les dates des événements importants comme le début du Ramadan dépendent de phénomènes astronomiques. Les chrétiens ont un système similaire pour déterminer Pâques (mais pas Noël, qui survient à date fixe). De même, le calendrier révolutionnaire français est astronomique : la méthode pour déterminer les années bissextiles ne dépend pas d'un algorithme mais d'observations. On ne peut donc pas prévoir facilement si une année future sera bissextile ou pas. Une réforme tardive de ce calendrier introduisait un mécanisme algorithmique et le transformait donc en calendrier arithmétique (mais elle n'a pas eu le temps d'être déployée avant le coup d'État de Bonaparte).

Comme tous les bons geeks, les auteurs ont inventé leur propre calendrier, le « date fixe » (Rata Die), qui compte le nombre de jours depuis le début de l'ère commune. La préface nous apprend ainsi que le livre a été terminé le 730 120 en « date fixe ».

Les auteurs ne perdent pas de vue les implémentations pratiques. Leurs algorithmes sont décrits en langage mathématique, sous une forme qui permet une programmation assez directe dans un langage de programmation fonctionnel. C'est ce que j'ai fait pour une partie des calendriers, en Haskell. (La composition du livre, elle, a dû exiger une bonne compétence en LaTeX.) On notera que le livre est accompagné d'un CD d'une implémentation complète en Common Lisp (attention, elle n'est pas du tout sous une licence libre).

On notera que les erreurs dans la seconde édition, publiée en 2000, sont nombreuses et l'erratum, publié sur leur site, est un impressionnant document. (Une troisième édition a été publiée fin 2007 mais je ne l'ai pas lue, merci à Damien Wyart pour son information.)

Cet article a été terminé le 6 février 2008 du calendrier grégorien, le 733 078 en « date fixe », le 18 pluviôse an 216 de la Révolution française, le 28 Muharram 1429 du calendrier musulman, le 12.19.15.1.0 du long compte maya et le 78-24-12-30 du calendrier chinois.

Version PDF de cette page (mais vous pouvez aussi imprimer depuis votre navigateur, il y a une feuille de style prévue pour cela)

Source XML de cette page (cette page est distribuée sous les termes de la licence GFDL)