Breakdown of the Gauss algorithm:
First, we'll consider the variables that only have to do with the (Gregorian) Calendar:
- The value of C = year MOD 7 takes care of the fact that a non-leap year is 1 day longer that 52 weeks, so for the day of the week
every date (including March 21) shifts one day per year, as does your own birthday.
Only if there is a leap day in between then it shifts an extra day, which is handled by B and N:
- The value of B = year MOD 4 counts the leap days according to the Julian calendar, i.e. one leap day every 4 years.
- The value of N = (4 + P - P DIV 4) MOD 7 (where P = year DIV 100) has to do with
the difference in the number of leap days between the Gregorian and the Julian calendar.
The Julian calendar has a leap day every 4 years, whilst the Gregorian calendar excludes the
100-fold years from being a leap year unless they can be divided by 400. This has to do with the actual length of the year,
which on the Gregorian Calendar is assumed to be 365.2425 days (in reality it currently is 365.24219 days).
Together, B and N handle the Gregorian leap days.
- Now we will ignore D for a while (it will be explained below).
Instead of E we will first look at E' = (2 x B + 4 x C + N) MOD 7.
The result is the number of days from March 22 until the next Sunday,
i.e. if March 22 is a Sunday then E' = 0, if it's a Saturday then E' = 1, etc. until E' = 6 if March 22 is a Monday.
So March 22 + E' is the first Sunday after March 21.
This calculation is remarkably clever of Mr. Gauss! Both B and C usually increment by 1 every year, so adding 2 x B + 4 x C
means adding 6 days every year. But in modulo 7 arithmetic, 6 is the same as -1, so effectively it subtracts 1 from the days
left until the next Sunday. Since March 22 is a day later the next year, it takes 1 day less until the next Sunday.
And because B never exceeds the value of 3 and C never becomes larger than 6, the value of E' correctly handles the leap days!
Now we are going to take the Moon into account:
- It appears to be so that 235 lunations (i.e. moon months) are practically equal to 19 tropical years
(a tropical year is the time between the beginning of spring one year and the next year).
This means that every 19 years the moon phases will occur on the same dates in the year.
This regularity was discovered by an ancient Greek called Meton and therefore this 19-year cycle is called the Metonic cycle (or moon cycle).
The value of A = year MOD 19 is simply the offset (from 0 to 18) of the given year within the corresponding Metonic cycle.
- Because this equality of 235 lunations and 19 years is not really exact (the difference is approximately 2 hours),
there is a small shift of about 1 day per 310 years = ca. 8 days per 25 centuries.
The value of M takes care of that shift
(as far as I know Gauss did not include a calculation of M in his algorithm).
For calculating M, some intermediate results are used: P = year DIV 100 is simply the century index,
Q = (3 x P + 3) DIV 4 takes care of the leap day difference between the Julian and the Gregorian calendar,
and R = (8 x P + 13) DIV 25 actually handles the shift of the Metonic cycle.
- Now look at D = (19 x A + M) MOD 30.
The number 19 we see here does not have the same meaning as the Metonic cycle used to calculate A,
but it comes frome the following: a so called Moon year of 12 Moon months is a bit more than 354 days, so
it is 11 days shorter than the Gregorian Solar year of 365.2425 days.
This means that the moon phases occur 11 days earlier every next year and since a Moon month has got 30 days
this implies that the Moon phases also occur 19 days later, which is the meaning of the 19 in the calculation of D.
The value of D handles the Metonic cycle (using A) and the long term shift thereof (using M)
as well as the length of the Lunar month (the 19 and the MOD 30).
The result actually is the number of days (from 0 to 29) to be added to March 21
in order to get the date of the first Full Moon in spring (PFM = Paschal Full Moon).
Finally, the first Sunday after this PFM is calculated:
- We want to find the Sunday after this PFM, so we have to add up to the first Sunday on or after PFM + 1.
Therefore we start with March 21 + D + 1 = March 22 + D.
In order to find the next Sunday, we do more or less the same as we did above with E'. But now we have added D to March 22.
This means that the day of the week has advanced D MOD 7 days, so using E' to find the next Sunday is no longer appropriate.
We will have to compensate for this extra advance.
This is handled by the term 6 x D in the calculation of E.
Note that adding D + (6 x D) MOD 7 to any date gets you back on the same day of the week.
- Together, this means that the value of
E = (2 x B + 4 x C + 6 x D + N) MOD 7 is just the right number that will bring you to the first Sunday after March 22 + D,
which is Easter Sunday.
- Alltogether the Easter date is calculated as F = (22 + D + E) March and if F becomes larger than 31 it will of course rollover to April.
- Finally, there is one caveat left: The length of a Moon month is not exactly 30 days, but 29.53.
This means that for large values of D we might find a PFM that is one day late and if that happens to be a Sunday, then we will end up
with an Easter date that is an entire week overdue.
Therefore the final correction: if F = 57 or (F = 56 and E = 6 and A > 10) then F = F - 7 must be applied.
This should be read as:
- if the result is April 26 (F = 57) then subtract 1 week;
- if the result is April 25 (F = 56) AND the day after PFM is a Monday (E = 6) AND the year is in the second half of a Metonic cycle (A > 10)
then subtract 1 week.
(Please note the following: A ranges from 0 to 18, so the threshold of A > 10 means A/18 > 10/18 = 5/9 = 0.55,
being practically equal to the fractional part of the length of the Moon month...)
Here's an Excel sheet showing this breakdown for a range of years.