Comencemos con un poco de historia. La Semana Santa es una festividad católica que tiene como colofón el Domingo de Resurrección o Pascua de Resurrección, y es ese preciso día el que marca todas las festividades católicas con fecha variable. Pero olvidemos por unos momentos las reminiscencias religiosas y quedémonos con la cuestión en sí del cálculo de dicha fecha.
De todos es sabido que la Semana Santa va cambiando (y bastante) de fechas y esta fecha viene determinada por la de la Pascua (cristiana). Por tanto, la pregunta es ¿cómo se define esta pascua? Tras muchas discusiones y concilios en el seno de la Iglesia, finalmente fue Dionisio el Exiguo (en el año 525) quien consiguió unificar el cálculo de la pascua cristiana. Para ello hay que partir de ciertas premisas:
- La Pascua ha de caer en domingo.
- Este domingo ha de ser el siguiente a la primera luna llena de la primavera boreal. Si esta fecha cayese en domingo, la Pascua se trasladará al domingo siguiente para evitar la coincidencia con la Pascua judía.
- La luna pascual es aquella cuyo plenilunio tiene lugar en el equinoccio de primavera del hemisferio norte o inmediatamente después.
- Este equinoccio tiene lugar el 21 de marzo.
- Llamamos epacta a la edad lunar. En concreto nos interesa para este cálculo la epacta del año, es decir, la diferencia en días que el año solar excede al año lunar. O dicho más fácilmente, el día del ciclo lunar en que está la Luna el 1 de enero del año cuya Pascua estamos calculando. Este número —como es lógico— varía entre 0 y 29.
En fin, mucha palabrería y nada de matemáticas hasta ahora. Como podréis suponer, el cálculo de la Pascua cristiana es ciertamente tedioso, a partir de dichas premisas y ha supuesto un gran problema.
Durante años han surgido diferentes métodos para calcular esta fecha, incluso durante el Renacimiento se extrajeron tablas de cálculo para la Pascua en función del número de oro φ. Hoy en día la fórmula más sencilla de calcular esta fecha es mediante la fórmula desarrollada por Gauss. Él, quien sino, propuso un sencillo algoritmo para el cálculo efectivo de esta fecha a través de la aritmética modular. Pero para ello necesitaremos ciertas variables.
Llamemos A al año para el que queramos calcular la Pascua. Llamemos M=24 y N=5 (dependiendo del siglo en el que esté A, los valores de M y N cambiarán, cf Wikipedia).
Sea a=A mod 19.
Sea b=A mod 4.
Sea c=A mod 7.
Sea d=19a+M mod 30.
Sea e=2b+4c+6d+N mod 7.
Entonces:
- Si d+e<10, entonces la Pascua será el día d+e+22 de Marzo.
- Si d+e>9, entonces la Pascua será el día d+e-9 de Abril
- Si la fecha obtenida es el 26 de Abril, entonces la Pascua se adelanta una semana y será el 19 de Abril.
- Si la fecha obtenida es el 25 de abril, con d=28, e=6 y a>10, entonces la Pascua se adelanta 1 semana y caerá en el 18 de abril.
Veamos un ejemplo de cómo funciona, comprobando la Pascua para el presente año, es decir, con A=2009. En este caso:
a=2009 mod 19, es decir, a=14.
b=2009 mod 4, es decir, b=1.
c=2009 mod 7, es decir, c=0.
d=19a+M mod 30, en este caso, d=290 mod 30, es decir, d=20.
e=2b+4c+6d+N mod 7, en este caso, e=127 mod 7, es decir, e=1.
Como d+e=21>9, la Pascua será el día d+e-9=12 de Abril, que es, precisamente, el próximo Domingo.
En fin, en el artículo de la Wikipedia sobre cáluclo de la fecha de Pascua, en el que se basa esta entrada, podéis encontrar programas en diferentes lenguajes de programación para calcular estas fechas, así como más datos al respecto.
Tito Eliatron Dixit.
Hola Tito, cuanto tiempo! Yo en su dia me interese por el tema, y localice otro algoritmo que usa algo de numeros aureos, creo que es el que comentas en tu entrada, te copio aqui el codigo fuente para calcularlo en Delphi (pascal) por is alguien tiene interes (incluye la fuente de donde lo saque):
ResponderEliminar//Fuente: http://www.ciencia-hoy.retina.ar/hoy35/pasc01.htm
function DomingoDePascua(anno: integer): TDateTime;
var g, c, x, z, d, e, dia, mes: integer;
begin
//g = numero aureo (el ordinal del año en el ciclo de Metón, entre 1 y 19)
g:= anno mod 19 + 1;
c:= round(anno/100)+1;
x:= 3*round(c/4)-12;
z:= round((8*c+5)/25)-5;
d:= 5*round(anno/4)-x-10;
//e = epacta (numeral del día del mes lunar, de O a 29, con 1 como el correspondiente a Luna nueva)
e:= (11*g+20+z-x) mod 30;
if ((e=25) and (g>11)) then
e:= e-24;
//Calcular la fecha de la luna segun el ciclo de Meton
dia:=44-e;
//Si la fecha es anterior al 21 de marzo aumentar a abril
//El intervalo posible es del 22-3 al 25-4 inclusive.
if (dia<21) then
dia:= dia+30;
dia:= dia+7 - (d+dia) mod 7;
mes:= 3;
if(dia>31) then begin
mes:= 4;
dia:= dia-31;
end;
result:= EncodeDate(anno, mes, dia);
end;
Muy Interesante Sergio... y cuánto tiempo, sí.
ResponderEliminarPero.. ¿tendrías el código en PHP? es que en Semana Santa tengo poco tiempo para traducir códigos... y sí, soy un poco bastante vago ;-)
En fin, que gracias por la aportación. Muy interesante, como siempre.
Me pareció un muy buen artículo, nunca me hubiera imaginado que Gauss hubiera ideado algo así.
ResponderEliminarAl principio pensé que en donde pones:
"a=A mod 19"
Te referías a las clásicas congruencias y que, por algún problema con los símbolos, habías dejado "=" en vez de las 3 lineas que se ponen en las congruencias... ¡Pero si no son lo mismo! He encontrado que no es precisamente lo mismo la "operación módulo" y la congruencia, aunque están muy relacionados...
¿Podrías explicar algo del tema? Gracias.
Me gusta mucho el Blog.
P. cuando se dice que a=A mod 19, se refiere que al realizar la división (euclídea) de A entre 19, el resto es exactamente "a".
ResponderEliminarHola Tito, no, solo lo tengo en "Pascal" y, en el articulo que menciono está en "C". Traducirlo seria sencillo, pero hay que saber PHP y en eso yo ando un poco "pez".
ResponderEliminarEn fin, si tuviera tiempo y ganas, igual lo hago.
ResponderEliminarGracias.
Interesante articulo, sin embargo, la forma no matematica decalcular es asignando la semana santa a la semana donde cae la primera luna llena despues del 21 de marzo, eso es por q luna llena debe ser lo mas cercana si no es el mismo dia del viernes santo por tradicion. y hasta donde se el metodo q explico es el q se utiliza en general.
ResponderEliminarEso es asi, siempre y cuando no coincida con la Pascua Judía.
ResponderEliminarAdemás, el problema consiste en saber cuándo será la primera luna llena después del 21 de Marzo.
Bueno, en la misma wikipedia tienes un bonito codigo en PHP que calcula esta fecha, aunque a lo mejor prefieres el codigo propuesto con el numero aureo
ResponderEliminarhttp://es.wikipedia.org/wiki/C%C3%A1lculo_de_la_fecha_de_Pascua.
tienes otro php en http://micropakito.wordpress.com/2008/01/20/fechas-de-semana-santa/
Tanto el PHP de la Wikipedia (que ya probé con éxito) como el del enlace que propones, se basan en el algoritmo de Gauss.
ResponderEliminarYo querría el PHP del algoritmo del número de oro.
Gracias de todas formas, Hands.
He estado transcribiendo el codigo propuesto por el camarada sergio al php y a pesar de efectuar calculos, estos no siempre corresponden a un domingo, por lo que me he permitido efectuar una correccion al domingo mas proximo.
ResponderEliminarLos calculos obtenidos a partir de esta correccion obedencen a un termino poco matematico que los profanos denominamos, "casi".
de hecho no me habria dado cuenta si no hubiera extendido la lista hasta el año 2018, año en el que me falla el asunto, a pesar de todo, os dejo la traduccion al objeto de que la mejoreis si os gustan los rompecabezas.
http://pastebin.mysql-es.org/show/LmEgXWra
Como ya te comenté, el método de Gauss es únicamente uno de los muchos algoritmos que se han creado para calcular la Semana Santa.
ResponderEliminarEso sí, el de Gauss tiene el mérito de ser el primero, y de seguir siendo útil.