Thursday, April 19, 2007

Computus Paschalis

Ever wondered how the date of Easter is calculated? I have, ever since I was a kid. The grownups didn’t seem to know and I couldn’t find it in any book. But now that I have the enormous power of the internet at my disposal, I did some ‘research’ on Google and finally found the answer.

The Jewish Passover is celebrated starting on the 14th of Nisan. So the Last Supper was on 14th Nisan, the Crucifixion was on 15th and the Resurrection on the 17th. Since the Resurrection was on a Sunday, Jewish Christians celebrated Easter on the first Sunday after the 14th of Nisan. But the Jewish calendar did not fit well with the Julian calendar used in much of the Roman Empire.

In 325 AD, the First Council of Nicaea in decreed that Roman calendar shall be followed and formulated a set of tables to calculate the date. These tables have been revised over the centuries eventually resulting in the tables constructed by Dionysis Exiguus, the 6th century Abbot of Scythia. In the 16th century, Pope Gregory XIII of the Roman Catholic Church introduced the current Gregorian calendar and revised the tables accordingly.

The date of Easter is the first Sunday after the first ecclesiastical full moon on or after March 21st. The ecclesiastical full moon is calculated from the tables mentioned earlier and not necessarily the same as the astronomical full moon. This means that Easter falls between March 22 and April 25.

Unlike us here in India, most Orthodox Christians continue to use the Julian calendar and determine the date accordingly. Fortunately, this year both dates coincided and everybody celebrated Easter on April 8th. But often the two dates are a week apart.

The Explanatory Supplement to the Astronomical Almanac provides a simple algorithm (attributed to J.M. Oudin, 1940) to compute the date of Easter according to the Gregorian calendar.
c = y / 100
n = y - 19 * ( y / 19 )
k = ( c - 17 ) / 25
i = c - c / 4 - ( c - k ) / 3 + 19 * n + 15
i = i - 30 * ( i / 30 )
i = i - ( i / 28 ) * ( 1 - ( i / 28 ) * ( 29 / ( i + 1 ) ) * ( ( 21 - n ) / 11 ) )
j = y + y / 4 + i + 2 - c + c / 4
j = j - 7 * ( j / 7 )
l = i - j
m = 3 + ( l + 40 ) / 44
d = l + 28 - 31 * ( m / 4
Where the input is y=year and the outputs are m=month and d=date, all variables being integers. Go code!

1 comment: