In questo articolo vedremo come è possibile calcolare matematicamente il giorno della Pasqua cristiana. Useremo un semplice algoritmo che presuppone un minimo di conoscenza matematica, particolarmente della divisione di interi, del resto delle divisioni e dell’operatore modulo.

L’algoritmo può essere applicato a qualsiasi anno del calendario Gregoriano (entrato in vigore nel settembre del 1752).

Facciamo riferimento al numero dell’anno con la variabile y e la usiamo per calcolare il Golden number:

g = y mod 19 + 1

Dopodiché calcoliamo la luna piena Pasquale, il giorno di Pasqua coincide con la domenica successiva. Il procedimento viene fatto in diversi passaggi. Prima calcoliamo i due valori chiamati “correzione solare”, s, e “correzione lunare”, l.

s = (y - 1600) div 100 - (y - 1600) div 400 l = (((y - 1400) div 100) × 8) div 25

In seguito calcoliamo una data non corretta della luna piena Pasquale, p’ e poi applichiamo un fattore di correzione per ottenere la data esatta, p, come il numero di giorni dopo il 21 Marzo.

p' = (3 - 11g + s - l) mod 30 if (p == 29) or (p == 28 and g > 11) then p = p' - 1 else p = p'

Ora abbiamo bisogno di calcolare il giorno corrispondente alla Domenica successiva, prima calcoliamo il “Dominical number”, d:

d = (y + (y div 4) - (y div 100) + (y div 400)) mod 7

Notate che questo è il numero dal quale viene determinata la “Dominical letter”, ora calcoliamo d’, che sarebbe la data in cui capita la prima domenica dell’anno:

d' = (8 - d) mod 7

Già abbiamo p la data della luna piena Pasquale nei giorni dopo il 21 marzo. Ora andiamo a determinare p’’ la prima data dell’anno che capita nello stesso giorno della settimana della luna piena Pasquale. Prima determiniamo il “numero di giorno” di p rispetto al primo Gennaio. Con 31+28+31+p=80+p (Notare che possiamo ignorare la possibilità che febbraio abbia 29 giorni perché ci abbiamo già pensato nel calcolo di d dunque potremo vedere che questi due valori si cancellano a vicenda), p’’ è dato dalla formula:

p'' = (80 + p) mod 7 = (3 + p) mod 7

La differenza tra d’ (la prima domenica dell’anno) e p’’ (il giorno della settimana in cui capita la luna piena Pasquale) ci da il numero di giorni da aggiungere a p per ottenere la data della domenica successiva, che è il giorno di pasqua. C’è ancora un’altra condizione: questo numero deve essere compreso nell’intervallo 1-7 piuttosto che 0-6, dato che non è consentito che la Pasqua capiti proprio il giorno della luna piena.

Prima determiniamo x’, la differenza tra d’ e p’‘:

x' = d' - p'' = (8 - d) mod 7 - (3 + p) mod 7 = (8 - d - (3 + p)) mod 7 = (5 - d - p)) mod 7

Per fare in modo che il numero sia compreso tra 1 e 7, calcoliamo x

x = (x' - 1) mod 7 + 1 = (4 - d - p)) mod 7 + 1

Finalmente possiamo calcolare e il numero di giorni dopo il 21 Marzo in cui capita Pasqua:

e = p + x

oppure

e = p + 1 + (4 - d - p) mod 7

In altre parole il giorno di pasqua capita:

if e < 11 then (e+21) Marzo else (e-10) Aprile

Segue una versione ottimizzata delle tecniche qui sopra esposte. La procedura è stata utilizzata all’interno dell’utility sdg (Santo del Giorno). Il linguaggio di implementazione è il php ma con un minimo di conoscenza è possibile portare il codice sotto qualsiasi linguaggio di programmazione che dia la possibilità di effettuare calcoli semplici e scrivere stringhe.

<?php
function getEasterSunday($year, &$month, &$day)
{
  $correction = 0;
  if ($year < 1700) $correction = 4;
  elseif ($year < 1800) $correction = 5;
  elseif ($year < 1900) $correction = 6;
  elseif ($year < 2100) $correction = 0;
  elseif ($year < 2200) $correction = 1;
  elseif ($year < 2300) $correction = 2;
  elseif ($year < 2500) $correction = 3;

  $day = (19 * ($year % 19) + 24) % 30;
  $day = 22 + $day + (( 2 * ( $year % 4 ) + 4 * ($year % 7) + 6 *
                $day + 5 + $correction) % 7);

  if ($day > 31) {
   $month = 4;
   $day = $day - 31;
  } else {
   $month = 3;
  }
}
?>
Allegati