Année bissextile

Il peut être intéressant de déterminer si une année A est bissextile ou non et d'afficher ce caractère dans une feuille de calcul. Nous ne parlons ici que du calendrier grégorien.

Rappel : dans le calendrier grégorien une année est bissextile si elle est divisible par 4, sauf les années séculaires qui ne sont pas divisibles par 400 : 1600 et 2000 sont bissextiles , 1700, 1800, 1900, 2100, 2200 ne le sont pas.

Naturellement il n'est pas difficile pour nous de déterminer "à l'oeil" si une année est bissextile ou pas. Mais malheureusement la fonction "déterminer à l'oeil" n'existe dans aucun langage de programmation. Il faut donc établir une formule ou des tests qui, exprimés dans la syntaxe du langage en question, permettront de préciser le caractère bissextile de l'année Je propose ici d'appliquer à l'année un ensemble de trois tests successifs de divisibilité par, dans cet ordre, 400, 100 et 4. Les trois tests de divisibilité doivent être appliqués successivement à l'année A tels qu'ils sont écrits.

1 - Le premier, divisiblité par 400, sélectionne les années telles que 1600, 2000, 2400,…

2 - Le deuxième, divisibilité par 100, élimine les années qui sont simplement divisibles par 100 mais qui n'ont pas satisfait le test précédent, comme 1700, 1800, 1900, 2100, 2300, ….

3 - Le troisième, divisibilité par 4, sélectionne les années bissextiles "quelconques" telles que 1904, 1908,…1996, 2004 qui ne sont divisibles ni par 400 ni par 100.

Exprimé avec la fonction MOD(A;n) du tableur Excel qui donne le reste de la division de A par n l'ensemble de tests s'écrit :

=SI(MOD(A;400)=0;"bissextile";(SI(MOD(A;100)=0;"commune";(SI(MOD(A;4)=0;"bissextile";"commune")))))

Le site de Microsoft propose une formule très semblable mais moins immédiatement lisible.

Naturellement une année peut être divisible à la fois par 100 et 4, et une année divisible par 400 est aussi divisible par 100 et 4.

Si l'on préfère les chiffres ces trois tests peuvent être associés à des indexs ("flags" en anglais) r1, r2, r3 qui prennent la valeur 1 ou 0 suivant le résultat du test. A nouveau les trois tests sont appliqués successivement à l'année A :

Si l'année est divisible par 400 r1 = 1 sinon r1 = 0
Si l'année est divisible par 100 r2 = 1 sinon r2 = 0
Si l'année est divisible par 4, r3 = 1 sinon r3 = 0

Si on forme l'expression r1 - r2 + r3 avec ces trois index le résultat vaut 1 si et seulement si l'année est bissextile
sinon il vaut 0

Cela se traduit (toujours dans Excel) par :

=SI(SI(MOD(A;400)=0;1;0)-SI(MOD(A;100)=0;1;0)+SI(MOD(A;4)=0;1;0)=1;"bissextile";"commune")

C'est la formule utilisée dans le fichier que je propose.

Exemples

Année + - + r1 - r2 + r3 année
1600 r1 = 1 r2 = 1 r3 = 1 1 bissextile
1700 r1 = 0 r2 = 1 r3 = 1 0 commune
1845 r1 = 0 r2 = 0 r3 = 0 0 commune
1900 r1 = 0 r2 = 1 r3 = 1 0 commune
1956 r1 = 0 r2 = 0 r3 = 1 1 bissextile
2000 r1 = 1 r2 = 1 r3 = 1 1 bissextile
2178 r1 = 0 r2 = 0 r3 = 0 0 commune

 

Note : l'année grégorienne compte en moyenne 365,2425 jours. Elle est donc plus longue que l'année tropique moyenne de 0,0003 jours. En 10000 ans le décalage atteindra en conséquence 3 jours. Il est parfois mentionné que, pour compenser ce décalage, les années 4000, 8000, 12000, etc. ne seront pas bissextiles. Il restera quand même un jour de décalage sur 10000 ans. Mais ce n'est pas une règle grégorienne officielle. Je n'en tiens donc pas compte. Et puis 4000, c'est loin.....

 

Merci à D.C. de Montevideo (Uruguay) pour m'avoir incité à établir ces formules

Modifié le jeudi 16 octobre 2008