Lembrado por esta posta, e continuando com a série das datas, apresento-vos hoje o cálculo do dia da Páscoa. Este cálculo é muito importante nas civilizações de origem católica, visto que três feriados (em Portugal – noutros países até podem ser mais) dependem do dia do Domingo de Páscoa: o Carnaval é 47 dias antes; a Sexta-feira Santa é dois dias antes; e o Corpo de Deus é 60 dias depois.
Antes de passarmos ao cálculo do dia, é preciso introduzir alguns conceitos.
O ciclo metónico é um múltiplo comum entre anos solares e meses lunares, correspondente a 19 anos. Foi observado pela primeira vez pelo astrónomo grego Meton. Na realidade, o ciclo não é exactamente o mesmo: 19 anos solares são 6939,602 dias e os 235 meses lunares correspondentes são 6939,688 dias; isto é, existe um desfasamento de 0,086 dias, ou 2 horas, 3 minutos e 50 segundos (e 4 décimas, já agora). Este ciclo indica-nos que cada ano têm um número correspondente a este ciclo, chamado o Número Dourado. É calculado efectuando o resto da divisão entre o ano actual e o número 19, e somando 1 ao resultado dessa operação (antigamente, não gostavam nem um bocadinho do zero – daí este mais um). Este ano, por exemplo, o Número Dourado é o 15.
A diferença entre o calendário Juliano (até finais do século XVI, dependendo dos países – alguns vieram quase até ao séc. XX) e Gregoriano, ao nível da quantidade de dias, é apenas nos anos de século não bissextos, isto é, nos anos que são divisíveis por 100, mas não por 400. O calendário Juliano tinha um ano bissexto de 4 em 4 anos, certinho. O Gregoriano também, mas exclui os anos de século, excepto se forem divisíveis por 400. Este cálculo é também chamado Equação Solar.
Este cálculo é também chamado Equação Lunar, e calcula o número de dias de desvio do mês lunar a partir do calendário Juliano. Este número aumenta 8 vezes a cada 2500 anos.
Dia do mês lunar no dia 1 de Janeiro do ano a calcular. O mês lunar decorre entre duas luas novas. Em 2010, a Epacta foi 14, isto é, estava quase lua cheia no dia 1 de Janeiro. O cálculo da Epacta é todo um tratado: assume-se que a lua avança 11 dias de ano para ano dentro do ciclo Metónico, e que tem de se levar em linha de conta com a Equação Solar (a subtrair) e com a Equação Lunar (a somar). Dois ajustes são necessários: em primeiro lugar, uma constante, 20, para acertar o dia lunar; em segundo, duas condições de acerto, se a Epacta for 25 e o Número Dourado for maior do que 11, é preciso acrescentar 1 à Epacta, procedendo-se de igual modo se a Epacta for 24. Como não podia deixar de ser, estas condições destinam-se a acertar a lua com possíveis condições de bissextalidade, no caso, dos anos precedentes.
O pseudo-código seguinte baseia-se em todos os conceitos anteriores, e é o mesmo algoritmo, com algumas correcções, apresentado por Donald E. Knuth em The Art of Computer Programming, Vol. 1 [Addison-Wesley, 1969]. Todas as divisões devem ser consideradas como truncagens, isto é, o resto é descartado. O símbolo % representa o resto da divisão.
Seja ano = ano a calcular; Seja NumDourado = (ano % 19) + 1; Seja Século = (ano / 100) + 1; // na realidade, este cálculo de século // está errado, visto que o "ano de século" // pertence ao século precedente, e não ao // seguinte - mas é assim que é preciso // para este cálculo da data da Páscoa Seja EqSolar = ( (3 x Século) / 4) - 12; Seja EqLunar = ( ( 8 x Século + 5) / 25) - 5; Seja Epacta = 11 x NumDourado + EqLunar - EqSolar + 20; Epacta = Epacta - 30 x (Epacta / 30); // porquê, quando podia ter sido // feito com um resto da divisão? // porque, para anos muito grandes, // existe a possibilidade da Epacta // ser negativa, pelo que a // multiplicação por um número // negativo se impõe nessas condições Se ( (Epacta = 25 E NumDourado > 11) OU (Epacta = 24) ) Epacta = Epacta + 1; Seja LuaCheia = 44 - Epacta; // porquê 44? Porque é o suficiente para chegar // a Março. São 30 dias para um ciclo lunar // completo, mais 14 para chegar à lua cheia Se (LuaCheia < 21) // o 21 representa o 21 de Março da data Pascal LuaCheia = LuaCheia + 30; Seja CorrecçãoDomingo = ( ( 5 x Ano) / 4) - EqSolar - 10; // mais uma vez, a diferença entre calendários a fazer das suas... DiaPáscoa = LuaCheia + 7 - ( (CorrecçãoDomingo + LuaCheia) % 7); // isto é, na semana subsequente à lua cheia (+7), menos o resto da própria lua // cheia - porque o Domingo assume-se como o dia 7 da semana, dando resto 0, // depois dos devidos acertos. No entanto, ainda é possível que este dia seja // superior a 31, o que quer dizer que a Páscoa passou para Abril Se (DiaPáscoa > 31) DiaPáscoa = DiaPáscoa - 31; MêsPáscoa = Abril Senão MêsPáscoa = Março
That’s it. Parece mais complicado do que, na realidade, é.