[soc.religion.christian] Easter algorithms I

mls@sfsup.att.com (Mike Siemon) (06/24/91)

Cathy Fasano asks:

+ I have this vague memory of seeing somewhere on the net an algorithm
+ for calculating the date of Easter in any particular year.  Of course
+ I know about "the first Sunday after the first full moon after the
+ vernal equinox", but I don't, in general, know the dates of full moons,
+ so that's not very useful.

Actually, knowledge of full moons and equinoxes is only marginally useful
anyway :-)  because the actual calculations that set the date of Easter
are dependent on cyclical approximations.  I will try to answer Cathy's

the one that gives the algorithm she seeks; this article doesn't have it!)

Sources for what follows are early editions of the Encyclopedia Britannica
(11th and 13th editions certainly; I don't know when they dropped the data
that are needed for this purpose, but the editions from the mid-50s on are
inadequate to this purpose) and the _Explanatory Supplement to the Astro-
nomical Ephemeris_ (published jointly by the US and UK governements) which
is my most immediate source.

Given some of my dyspepctic comments about this in earlier articles, I want
here to explain in some detail what is going on, and why the matter is so
easy for "simple" statements in ordinary language to misrepresent.  Please
bear with me -- or if you would rather not, you may ignore this note and go
to the end of my second one for a detailed C program for Easter dates.

Calendar cycles.
----------------

This whole issue of Easter, if we are to follow Nicea, has several distinct
components.  Easter is on a Sunday -- thus we are concerned with the cycle
of days of the week.  It follows the spring equinox -- and so we need to
represent THAT, despite the problem that the equinoctial position recurs at
an interval (approximately 365.2422 days) that is NOT easily represented in
a calendar.  And, we also believe, it is necessary to observe the phases of
the moon, since the Jewish calendar that sets the time of Passover was a
lunar calendar, and 14 Nisan represents the full moon of the first month of
spring.  I will beg off dealing here with Jewish calendars, and just take
Cathy's statement of the Nicene constraints.  In any case, Sunday, equinox,
and full moon are ALL elements which we agree must enter into Easter dating.
[Recent posts suggest that the Orthodox churches see the Nicene constraints
a bit differently from the way the West does; I am not trying to controvert
that understanding here -- things are hard enough with the Western version.]

To see the *kind* of thing that happens in calendars, the day-of-the-week
cycle is a good starting point.  52 weeks of 7 days constitute 364 days --
one short of the "usual" 365 and two short of the 366 days in leap years
of the Julian calendar.  Thus, throughout the year if you know that today
is day N, and that January 1 was an X-day (sunday, monday, tuesday, ...),
then today is an [X + (N modulo 7)]-day. (And one sees that if *this* year
Jan. 1 is an X-day, then *next* year, it is an X+1-day -- except on leap
years!)  For calendar purposes, it is usually prefereable to take March 1
as the start of the year, with the variable February as the "last" month.

Our B.C./A.D. calendar is the construct of Dionysius Exiguous (in the late
6th century?)  It is of some interest that he started with the year 0 (or
in his nomeclature, 1 B.C.)  When people loudly insist that the new millen-
ium begins in 2001 (and not 2000), it is worth observing that they do not
know the history of our calendar.  Dionysius did not use a notation with
zeros, but his construction is as much 0-origin as arrays in the the C
language.  Those of you who wish TRULY to be pedantic can insist that the
"correct" millenium is in 2000 :-)

Anyway, to quote the _Explanatory Supplement_, "In the Julian calendar,
January 1 of the year 0 [1 B.C.], which is a leap year [yet further data
in favor of my statement above that Dionysius was using a zero origin :-)]
was Thursday; therefore, the Julian dominical letter for January and February
is D and for the remainder of the year C.

This introduces a sequence of letters A,B,C,D,E,F,G for the residues modulo
7 of the start of the year.  (These are the "dominical letters.")  It is
preferable, for algorithmic purposes, to use 0-6 instead for these.  Noting
that March 1 is 31+28 = 59 days after the start of (non-leap) years, and 60
days after Jan. 1 in leap years, we have Thursday Jan. 1 -> Monday March 1,
0 A.D., and the remark in the Explanatory Supplement translates to:

	day N (= date - March 1) of year Y (Julian) is 1+Y+N modulo 7,

plus a leap year correction of 1+(int)Y/4.  That is, if the Julian calendar
had remained in use in Europe, we could still define the day of the week as
the mapping of this residue into the set {Sun,Mon,Tue,Wed,Thu,Fri,Sat}. The
Gregorian correction amounts to a  *decrement* of a day (counteracting the
Julian term) on century years not multiples of 400.  In other words, the
day of the week of March 1 in year Y of the Gregorian calendar (after 1582)
is:

	D = 3+Y+(int)(Y/4)-(int)(Y/100)+(int)(Y/400) modulo 7

(My first attempt at this was an off-by-one version with a leading 2; you
may confirm this version by trying various years in the UNIX cal comand,
with cal 3 <year> input.)

The first step towards an "Easter algorithm" is to combine this with the
"Sunday after the equinox" constraint.  March 22 is three weeks after the
1st of March, and hence has the same day of the week we just calculated.
Thus if D above is 0, March 22 is a Sunday; otherwise, March 22 + 7 - D
is the next Sunday after the equinox.

Note: I have just skirted over a touchy point.  The spring equinox is NOT
always on (Julian or Gregorian) March 21.  That is a conventional date, and
is indeed sometimes incorrect.  But for ecclesiastical calculations, it is
the presumed date of the equinox. Everything that follows *assumes* March
21 as the equinox -- please keep in mind that this is astronomically naive.

Anyway, taking March 21 as *the* equinox, and Easter as of necessity AFTER
this, we may seek the dates of Sundays falling on or after March 22.  The
day of the week of March 22 is given by D above. Subsequent Sundays are
given by

	March 22 + 7*(7-D)*n, n = 0,1,2,3,...

In pre-Nicean times, the Roman church celebrated Pascha on the Sunday  
nearest (first after?) the equinoctial date of March 21 (actually, in
the earliest period it was assumed that the equinox was on the 25th, and
this was the traditional date of the original Resurrection in Rome.)

In any case, we get (as long as we continue to ignore the moon) a date
for Easter that can be formulated as

	March 22 (if D = 0) or March 22 + 7-D (for D > 0)

I am going to cut off this first article here.  To deal with the lunar
cycle requires (at least!) another article -- and no Easter algorithm
(post Nicaea) can be constructed that doesn't have some reference to the
moon.  In my next note I will (try to) explain lunar cycles as they
interact with the solar calendar we are familiar with.  Here, too, there
are some arbitrary choices, like taking March 21 as THE spring equinox.
Much of the subtlety of the Gregorian calendar shift of 1582 has to do
with lunations; I probably will not do justice to all of that, but I do
hope to come out at the end with a usable algorithm, nonetheless.  For
now, I will leave things at a point that has no reference to moons or
months, the real "jokers" in most human calendars.
-- 
Michael L. Siemon		I was ready to be sought by those
m.siemon@ATT.COM		    who did not ask for me;
...!att!attunix!mls		I was ready to be found by those
standard disclaimer	  	    who did not seek me. --  Isaiah 65:1