Easter date algorithms (c) Henk Reints

Use this algorithm | Gebruik deze algoritme

Gregorian algorithm by Carl Friedrich Gauss (1777-1855).

Valid for any year since 1583.

Any encyclopedia (at least in The Netherlands).

Many references suggest this algorithm by Gauss is the official Easter dating method and that he was the first to find a method for calculating the date of Easter. However, this is absolutely definitely not true! Lilius & Clavius devised their algorithm in the 1570's, two centuries before Gauss was born in 1777. Only the Lilius/Clavius method and nothing else has been used and will be used by the Roman Catholic Church since the Gregorian calendar reform in 1582, as it was announced and prescribed in Pope Gregory XIII's Bull "Inter Gravissimas".

Gauss knew he was born in 1777, on a Wednesday, a bit more than a week before Ascension Day. That's what his parents could remember, not the precise date. However, he was eager to know his exact birth date. Apparently he was unaware of the official Easter dating method used by the Roman Catholic Church (or maybe he simply didn't want to use it or search for it), so, being a very intelligent mathematician, he simply made his own Easter dating formula, and then determined Ascension day was the 8th of May, so he was born on the 30th of April.

But please keep in mind that Lilius/Clavius is the ONLY REAL THING as far as the official Easter date of the Roman Catholic Church is concerned! See also my Dutch translations website with historical texts about this Gregorian Calendar reform.

In most cases where you find Gauss' algorithm in an encyclopedia or so, the values of M and N ar just given as:

For the 20st and 21st century M = 24 and N = 5.

Below, you will find a method to compute the values of M and N, which I devised myself, since I've never ever been able to find anything originating from Gauss about how to calculate them. I did this around 1998 or so, but on 16-Feb-2009 I found this WikiPedia page describing Gauss' original including calculation of M and N. Not identical, but I think I made a pretty good look-alike! I consider my version even simpler! In the algorithm below, all steps in darkblue are my own work, the steps in black are what I could find in other sources (especially Dutch encyclopedias). The values of M and N vary per century, the core of the Gauss algorithm is what varies per year.

A L G O R I T H M :

HR: P = year DIV 100  
HR: Q = (3 x P + 3) DIV 4   (or: Q = P - P DIV 4)  
HR: R = (8 x P + 13) DIV 25  
HR: M = (15 + Q - R) MOD 30  
HR: N = (4  +  Q) MOD 7  
Most sources simply state: for the 20st and 21st century M = 24 and N = 5.
Gauss: A = year MOD 19  
Gauss: B = year MOD 4  
Gauss: C = year MOD 7  
Gauss: D = (19 x A + M) MOD 30  
Gauss: E = (2 x B + 4 x C + 6 x D + N) MOD 7  
Gauss: F = 22 + D + E  
HR: if F = 57 or (F = 56 and E = 6 and A > 10) then F = F - 7  
  result = F  


Use this algorithm | Gebruik deze algoritme

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.

Easter date algorithms (c) Henk Reints