logo To Foot
© J R Stockton, ≥ 2009-10-12

The Calculation of Easter Sunday
after the Book of Common Prayer of the Church of England
.

No-Frame * Framed Index * Frame This
Links within this site :-
The Easter Sunday algorithm here was derived by me, J R Stockton, in September 2005, from the Prayer Book material, which is prescribed by the Calendar (New Style) Act (1750 c.23), which is the legal basis for the date of Easter Sunday in Britain and the then British Colonies.
Except as otherwise indicated, reference is to my (c.1960) copy of the Prayer Book.
Fully proleptic code in one version allows negative years.
The code has since been improved, but the underlying algorithm is unchanged.

This page is best read with a copy of the Prayer Book at hand; the Book of 1815 is sufficiently similar. Alternatively, use Statutes at Large 1765, Easter tables, Google Books.

I wish to acknowledge the help of members of the Society of Archbishop Justus both for providing images from pre-1752 Prayer Books and for discussions.

Introduction

Gregorian Tables and Rules for determining The Date of Easter Sunday are now by British law given at the beginning of the Book of Common Prayer of the Church of England (BCP). They superseded the previous Julian Easter material in September 1752. They are easier to use than may at first sight appear.

The Gregorian Easter routines derived on this page from the current BCP are thus traceable directly to the prime British authority. Tests show full agreement with other published routines.

A simpler routine for Julian Easter on the Julian Calendar has been deduced from other available information, and subsequently shown to agree with the 1662 Prayer Book.

CAUTION : Recently printed copies of ancient Prayer Books may contain the ancient liturgical material but with updated Easter pages.

Stages of Calculation

For both the Julian and the Gregorian Rules, Easter Day is the Sunday after the Paschal Full Moon (PFM). The PFM is the Ecclesiastical Full Moon (EFM) on or after March 21st (the nominal Vernal Equinox). The EFM is an approximation to the astronomical Full Moon (for those, see via HMNAO, Phases of the Moon).

For the Julian Rule, the result is given directly in a table indexed by the Golden Number and the Sunday Letter, presumed to be already known.

For the Gregorian Rule, the Number and Letter are defined, and three Tables are used in turn.

For numerical work, a date is commonly given in intermediate stages as a Day of March; Easter Sunday ranges from the 22nd to the 56th of March.

The Golden Number

The Golden Number, or Prime, is independent of the Calendar type, and depends only on the Year Number.

It is a perpetual repeated year count of 1-19 (often given in Roman numerals as I-XIX); it gives the position within the 19-year Metonic cycle of 235 Full Moons, used to determine the date of the PFM. For the year zero, its value would be one.

Zero was not in use when the Golden Number was introduced.

Clavius and the Act both specify adding 1 to the year number, dividing by 19, and using the remainder, 0 cointing as 19. It is better to divide the year by 19 and add one to the remainder.

The Gregorian Adjustment

In the longer term, the effective phase of the cycle is occasionally adjusted by a day, not by changing the calculation of the Golden Number itself but by changing the way in which it is used, with a Cypher indexing into a more complex Table, III. The Cypher is calculated modulo 30. The Cypher is incremented 3 times per 4 centades, for Leap Years omitted by the Gregorian rules, and also is decremented, 8 times per 25 centades, for the error of the Metonic cycle length. Each net change is by one of -1, 0, +1, and takes effect in a year divisible by 100.

The foot of that Table shows also a minor adjustment used to make the results more satisfactory.

The Sunday Letter

The days of the Calendar Year, omitting February 29th, are given a repeating sequence of letters A to G (both January 1st and December 31st are A; February 28th is C and March 1st is D). The letters are printed in the Monthly Calendar pages of my BCP, as A b c d e f g.

The Dominical or Sunday Letter is the letter for the Sundays of the year. Leap Years have two adjacent letters. The first is for January and February; the second, governing Easter, is for March to December. Only the latter is used here.

The Sunday Letter steps down after every December 31st and every February 29th.

In determining Easter, the Sunday Letter is used only to advance from the Paschal Full Moon to Easter Sunday, so it is not needed if a calendar of weeks or other means is available.

In the Julian Calendar, the Sunday Letter is C for the years numbered 28×N.

In the Gregorian Calendar, the Sunday Letter is A for the years numbered 400×N which open each fourth centade.

Code on this page uses a Sunday Number for which 0 to 6 matches Sunday Letter A to G.

The Paschal Full Moon

For Julian Easter, the Golden Number alone determines the date of the Paschal Full Moon. For Gregorian Easter, there is also a dependence on the centade.

Easter Sunday

Easter Sunday is the Sunday following the day of the Paschal Full Moon. It can be found by using the Sunday Letter, or by any other means.

An Old Mistake

1683-01a

The Easter section of the old Book of Common Prayer, from the 1662 Act of Uniformity to 1750, starts with an erroneous description of Julian Easter — "EAſter-day (...) is always the firſt Sunday after the firſt Full Moon which happens next after the One and twentieth day of March. ...". It should say on or after March 21st.

The Calendar Act of 1751, Section 3, repeats the words; but after And whereas according to the rule prefixed to the book of common prayer ...; so it makes a true statement about a false one. Note that the "enacted" part of the Section follows.

See Michael Reeve, John Wallis and the Date of Easter (pp.54-59; PDF, 725kB).

These Implementations

Gregorian Easter was only used after 1582.
Other algorithms may have been written or tested only for dates after 1582, or only for years A.D.
Easter Sunday is a Calendar date. In a language such as JavaScript which supports both UTC and local dates, a date calculation may for speed be performed in UTC, in order to give a result expressed as Y M D. A Date Object or equivalent holding such a result may be interpreted as the previous local day if the code is used much to the West of Greenwich. One can check that the date given for Easter Sunday is not a Saturday.

The following sections include illustrative JavaScript largely based on information in the BCP. The calculated Tables are equivalent and similar in layout to those in the BCP.

Some corresponding Gregorian VBScript routines are in VBScript Date and Time.

Some browsers may not show correctly some of the Tables as calculated here; my page The Easter Sunday Tables has copy'n'paste copies of them. Note that some tab characters are used.

For display and test, some routines from my JavaScript Include Files are used. Imported Gregorian function EGREaster is known to be good.

The Sunday Letter, as such, is not essential here. It is used in the BCP to move from the PFM to the following Sunday, which JavaScript can readily do either with a Date Object or with the corresponding Sunday Number.

SOME JAVASCRIPT NOTATION :-
	Math.floor(A/B)		integer division (slower, full range)
	(A/B)|0			   "	   "	(fastest, less range)
	Div(A, B)		   "	   "	(imported)
	A%B			A mod B         (unsuitable if A<0)
	Mod(A, B)		remainder	(imported; OK for A<0)
	=			assign
	==			compare equal
	!=			compare unequal
	+=			add to
This page uses Div(A, B) and Mod(A, B) for range,
and (A/B)|0 and A%B for speed.

Years are generally within about ±9e15, the integer range for JavaScript's IEEE Double representation. Astronomers' notation is used for B.C. years. A constant may be added to ensure that the first argument of the operator % is non-negative.

Code displayed is actual code, not a copy. Its layout is browser-dependent; see in JavaScript Code Boxes. Function results may be returned in various forms, including as a JavaScript Date Object, a Day-of-March number (22-56), or a date string.

The Easter Section of the Julian Prayer Book

CAUTION: Documents purporting to show the 1662 Prayer Book often have the Easter Tables and Rules of the present-day Book in lieu of the original material.

This section deals with the date of Julian Easter Sunday, on the Julian Calendar, as used in Britain up to September 1752.

The Julian Calendar has a Leap Year every fourth year, whenever Year mod 4 = 0. Julian lunations are regular, so the Julian Paschal Full Moon determination is much simpler than the Gregorian one.

The code shown here is fully proleptic.

Earlier : Using General Information

Conversion from Paschal Full Moon to Date of Easter requires only Day-of-Week. That can be done for Julian with JavaScript Date.UTC if the years are appropriately mapped, and we know that the Julian and Gregorian Calendars agreed around the year AD 250. It can also be done, more traditionally, with a Julian Sunday Number.

  Use Back to return.   The Table as text

       

Zeller's known-good value is used for comparison.
Years : -     Back to return

Using the Julian Prayer Book

The Books give the start of the year as March 25th. On that basis, a few years have no Easter Sunday, and an equal number have two.

I have now been provided with images of the Easter sections of the 1662 & 1683 Prayer Books. Each starts with the Old Mistake.

Within those sections, the Golden Number and the Sunday Letter are used, but are not defined. In each Book, one page gives a Calendar of Moveable Feasts for 1661-1700. Another gives the perpetual Easter Table, which resembles in format that in p.34 of my current BCP.

It is that Table which in Britain disseminated the authority for the dates of Easter Sunday before 1753.

Perpetual Tables for the Julian Date of Julian Easter Sunday

These compute the Julian Rule. The main display routines used also serve for the Gregorian Rule

In the Style of the Table in the 1662 BCP

Because this computed Table matches an authoritative standard, it validates the Julian PFM function earlier deduced.

  Use Back to return.   The Table as text

The Table is like the one on page 34 of my copy of the BCP.

¶ WHen ye have found the Sunday Letter in the upper-moſt Line, guide your Eye downward from the ſame, till ye come right over againſt the Prime ; and there is ſhewed both what Month, and what day of the Month Easter falleth that Year. But note, that the name of the Month is ſet at the left Hand, or elſe juſt with the Figure, and followeth not, as in other Tables by deſcent, but collateral.

For a given Golden Number, the Paschal Full Moon is clearly (from the definition of Easter Sunday) on the day before the earliest day in the row.

In the Style of some Tables in the Current BCP

  Use Back to return.   The Table as text

The Table is like those on pages 33 and 37 of my copy of the BCP.

Julian Easter using Table III of the Gregorian Prayer Book

The Gregorian Method, with Cypher set to 23 instead of being calculated, gives the Julian date of Julian Easter (Clive Feather's Whence Easter ?). The Gregorian Cypher is 23 for the centades beginning with AD 0000, 6700, 6900, and at approximately regular intervals thereafter (see below).


Use Back to return. The content exactly matches that from "Compute the Julian Table" above.

The Easter Section of the Gregorian Prayer Book

The Easter Date section of my own (ca.1960) copy of the current BCP is in pages 31 to 39. It has simple Tables to allow the calculation of Gregorian Easter Sunday for 1900-2199 & 2200-2299, and also more complex Tables I-III for 1600-8599 &c which indicate the perpetual algorithm. A more recent Prayer Book (ca.1980?) has substantially the same content. The material is not in my copy of the 1980 Alternative Service Book (ASB), which only lists Easter Sundays for 1981-2025.

The material in the 1765 Statutes and 1815 Prayer Book corresponds.

Page Index to Part of the Prayer Book

This, and the descriptions below, apply to my own copy of the Prayer Book. Page numbering varies with edition; page titles vary in detail.

PP.19-30 THE CALENDAR, WITH THE TABLE OF LESSONS
 
P.31 TABLES AND RULES
FOR
THE MOVEABLE AND IMMOVEABLE FEASTS
TOGETHER WITH
THE DAYS OF FASTING AND ABSTINENCE
THROUGH THE WHOLE YEAR
P.32 A TABLE
OF THE
VIGILS, FASTS, AND DAYS OF ABSTINENCE
TO BE OBSERVED IN THE YEAR
P.33 A TABLE TO FIND EASTER-DAY
FROM THE PRESENT TIME TILL THE YEAR 2199 INCLUSIVE,
ACCORDING TO THE FOREGOING CALENDAR
P.34 ANOTHER TABLE TO FIND EASTER
TILL THE YEAR 2199 INCLUSIVE
P.35 A TABLE OF THE MOVEABLE FEASTS
FOR FORTY-FOUR YEARS
ACCORDING TO THE FOREGOING CALENDAR
P.36 A TABLE OF THE MOVEABLE FEASTS
ACCORDING TO THE SEVERAL DAYS THAT EASTER
CAN POSSIBLY FALL UPON
P.37 A TABLE TO FIND EASTER-DAY
FROM
THE YEAR 2200, TO THE YEAR 2299 INCLUSIVE
P.38
GENERAL TABLES FOR FINDING THE DOMINICAL OR SUNDAY
LETTER, AND THE PLACES OF THE GOLDEN NUMBERS
IN THE CALENDAR
P.39
TABLE III

Pages 19-30 : THE CALENDAR, WITH THE TABLE OF LESSONS

In my copy of the current BCP, there are 12 monthly pages each headed "THE CALENDAR, WITH THE TABLE OF LESSONS". There is for each month a column of letters A b c d e f g repeating through the year, except that February 29th is skipped; January 1st and December 31st both have letter A. The March and April pages in my copy do NOT have an additional column for Golden Numbers.

However, a column of Golden Numbers, positioned for 1753-1899, is present for March and April in Statutes at Large 1765 and in Prayer Book 1815, and in the current (2008-04-23) Statute Law Database.

Although the Calendar Act of 1751 states (seek "Golden") that the old column shall thenceforth be omitted from the BCP, it also states that the new Calendar shall be as in the Annexe; and that Calendar does contain Golden Numbers.

Some versions have a column of Roman dates, Idus Martii style.

Page 31 : TABLES AND RULES ...

Book p.31

The page includes (wording as required by the Calendar (New Style) Act (1750 c.23)) :-

EASTER-DAY (on which the rest depend) is always the first Sunday after the Full Moon which happens upon, or next after the Twenty-first Day of March ; and if the Full Moon happens upon a Sunday, Easter-day is the Sunday after.

Subsequent material uses the terms "Paschal Full Moons" and "Ecclesiastical Full Moons", and makes it clear that these are an approximation to the astronomical "real Full Moons".

The Week

At the foot of the page, it is stated that the Monday and Tuesday in Easter-Week and Whitsun-Week are Feasts. Wikipedia says that Easter Week is the seven days starting with Easter Sunday (the previous seven days are Holy Week).

Traditionally the English week has started with Sunday, even though the Seventh Day of Creation was the day of rest. Now that ISO 8601, which ends the week with Sunday, is becoming ordinarily used, there is a chance of error in interpretation.

Page 32 : A TABLE OF THE VIGILS, ...

Not about the date of Easter.

Page 33 : A TABLE TO FIND EASTER-DAY ...

Book p.33

Page 33 covers the years 1900 to 2199 (which have a Cypher entry of 2 in Table II on page 38). The text describes the determination of the Golden Number for any year, and of the Sunday Letter for the periods 1900-2099 and 2100-2199, and how they are used with the Table.

The Table matches that in the 1815 Prayer Book on the equivalent of what is here called p.37.

The Golden Number

The Golden Number is defined verbally in the second paragraph of the text printed on the right of page 33, for all years, in a manner corresponding to GN := (Year+1) mod 19 ; if G=0 then G := 19 ; which amounts to GN := Year mod 19 + 1 ; .

The Paschal Full Moon

The Golden Number indicates, in the Table printed on the left of page 33, the date of the Paschal Full Moon. This code determines the first column of the Table.

  Use Back to return.   The Table as text

The Sunday Letter
0 A
1 G
2 F
3 E
4 D
5 C
6 B

The Sunday Letter, determined with the aid of the instructions in the third and fourth paragraphs and a small Table (applicable for all years) printed on the right of page 33, is then used in the Table on the left to move ahead from the PFM to Easter Sunday.

For 1900-2099, the Sunday Letter is to be obtained by using the equivalent of (Year + Year div 4 + 6) mod 7 to index the small Table on the right. For 2100-2199, add 5 instead of 6.

The Sunday Number used here represents A to G by 0 to 6.

Full Calculation for 1900 to 2199

The whole calculation from page 33, with the step from PFM to Easter Day handled in four ways, and a check with EGREaster, is :-

For 1900-2199 only

                 
 
  Next step only for Cypher=2
 so  
     BCP function : 1 2 3 4    

  P4 3GHz XP sp2 IE6 : 4.5 seconds.

Function BCPEaster4 should be efficient for its range.

1700-1899

The original Act, and therefore the contemporary Book, had a similar part which would likewise give the Gregorian date of Gregorian Easter Sunday for the period 1700-1899 (entry of 1 in Table II).

  Use Back to return.   The Table as text

A page on Gilbert Healton's site includes a full transcription of the corresponding page, for Easter Sunday from 1753 to 1899, annexed to the original Calendar Act. For the Sunday Letter :-
• to 1799, (Y + Y div 4 + 1) mod 7
• to 1899, (Y + Y div 4) mod 7

2008-04-19 : Google Books currently has, via link, images of the relevant pages of the 1815 Prayer Book; see pp. 24 ff. Its p.25 confirms the Sunday Letter, and the Table generated above. It largely matches my c.20 copy of the Book (limited-period matter differs but corresponds).

2008-04-21 : Page The Book of Common Prayer at the Society of Archbishop Justus leads to TABLES and RULES from the 1789 U. S. Book of Common Prayer, matching the 1815 Book.

Page 34 : ANOTHER TABLE TO FIND EASTER ...

The Table on page 34 is equivalent to the main Table on page 33, and so covers 1900-2199. In form, it resembles the Julian Table in the 1662 Book.

  Use Back to return.   The Table as text

Page 35 : A TABLE OF THE MOVEABLE FEASTS ...

Page 35 simply tabulates, in my copy for 1932-1975 (later : 1951-2000; ?-?), the Golden Number, the Epact, the Sunday Letter(s), the number of Sundays after Epiphany and Trinity, and Feast dates including Easter-Day.

However, the Epact is neither defined nor used. And it does not appear in the Calendar Act, so how does the BCP get the figures? It has values from 0 to 29, and is increased (mod 30) by about 11 (11±1?) each year. The values repeat every 19 years, but the sequence is often broken at the turn of the centade. It seems that Epact plus Day-of-March of PFM, then modulo 30, is often 14 (at least, in mid-c.20). For more, see Epact (David Madore); function Epacts here, derived from that, agrees with known Epacts. Blunt also describes the Epact.

The dates can be obtained from my page The Dates of Moveable Feasts & Fasts.

Page 36 : A TABLE OF THE MOVEABLE FEASTS ...

Page 36 tabulates the dates of other Feasts, and the number of Sundays after Epiphany and Trinity, for each possible Easter date, valid for all years. The footnote indicates corrections for January and February of Leap Years.

Page 37 : A TABLE TO FIND EASTER-DAY ...

Book p.37

The Table on page 37 is like the main one on page 33, but for 2200-2299 (the Cypher is 3). The Golden Numbers are moved down by one day, except for VI (6) which is raised to March 21.

The Sunday Letter algorithm for these particular years is not given, but Table I on page 38 can be used. The Letter is probably obtained by using the equivalent of (Year + Year div 4 + 4) mod 7 to index the small Table on the right of page 33.

In the associated text, it is made clear that the Ecclesiastical Full Moon conforms approximately, but not exactly, with the real Full Moon; and that a new Table is needed to maintain conformity for this centade.

  Use Back to return.   The Table as text

Pages 38-39 : GENERAL TABLES ...

Book p.39
Book p.38

Tables I & II (p.38) cover 1600-8599, and can be extended perpetually by deducing and using their underlying algorithms. Table III (p.39) is valid perpetually.

The Golden Number, defined on page 33, is required.

Computing Table I and the Sunday Number

Table I and its accompanying text deal with the Gregorian Leap Year Rules, enabling the Sunday Letter to be found for 1600-8599; its extension is obvious, as the secular calendar repeats every 400 years.

One must find the number N heading the column containing the centade, then form (Year + Year div 4 + N) mod 7, and that value in the first row indicates the Sunday Letter in the second.

  Use Back to return.   The Table as text

An Alternative Sunday Letter Table

Table I, while definitive and compact, is unnecessarily complex in operation.

Since the secular calendar repeats every 400 years (400×365.2425 = 20871×7), one can first take the year modulo 400 :-

Divide the Year by 400, then divide the Remainder by 20. In the Row indicated by the Result and the Column indicated by the Remainder, find the Sunday Letter.

  Use Back to return.   The Table as text

Calculating the Sunday Number

Table I is not in a convenient form. Using the 400-year repeat to advantage, and without a Table :-

Divide the Year Number by 400, then to the Remainder, omitting Fractions, add its Fourth Part and subtract its Hundredth Part; then add the Number 6, divide the Result by 7, and subtract the Remainder from the Number 6 to indicate by 0 to 6 the Sunday Letters A to G.

In computation, one can use simple algorithms (giving a different number), which could easily enough be expressed in ordinary words :-

Sunday Number Calculation Cross-Check

This verifies that the Sunday Number algorithms above agree. Converting Number to Letter is trivial.

    P4 3GHz XP sp2 IE6 : 2.5 seconds.

Computing Table II and the Cypher

BCP Table II, basically of three columns, has entries for centades from 1600-99 to 8500-99. Later centades are represented only by "&c.". The centades are in column 2, and column 1 has B for Leap (bissextile) Years. The Table gives, in column 3, a Cypher, which is used with Table III to provide the information which, for 1900-2199, is given by function GNtoActivePFM above.

It is here reproduced by calculation, with extra rows and columns. Columns 1, 2, 3 are as in BCP. Starting in effect from 1582, S is the Solar Correction (adjustment for Omitted Leap Years), L is the Lunar Correction (Metonic), D is their Difference S-L, and the Cypher is presumed to be D modulo 30. Column V verifies compact function BCPcypher(Yr).

S is incremented for every centade not divisible by 4, when S is divisible by 3. L is incremented after every three centades, except that it remains divisible by 8 for four centades.

 
The Table as text

Note that the pattern in Column 3 from 8500 does not repeat that from 1600. The expression used here for L fits the Table, but is not the only one that would. It gives 8 steps per 25 centades, which is known to be appropriate from other sources. Knowing only that it repeats every 25 centades (Clavius), that much of Column L completes the definition of the Lunar Correction.

Look up the Cypher (0-29) for the centade, and apply it to Table III as below.

It can be seen from function BCPcypher that the Cypher pattern repeats after 3000 centades.

2009-04-19 : Table II can be split into Tables IIa & IIb, one for the Solar Correction and one for the Lunar Correction. Both would be shorter, and would have obvious patterns.

Computing Table III

In Table III, the entry for Cypher CY = BCPcypher(Yr), Golden Number GN and Paschal Full Moon Day-of-March DM can be seen to satisfy CY[GN, DM] = (11*GN + DM + 6) mod 30 apart from the displacement near the end.

The Table calculated here is reversed left-to-right, to ease depicting the step in the row for April 17.

  Use Back to return.   The Table as text

In Table III, seek the Cypher from Table II in the column under the Golden Number, then go left for the PFM and down for the Sunday Letter to find Easter Day; the first two columns should extend in an obvious fashion to April 25th.

The combined pattern of the Golden Number and the Cypher repeats after 57000 centades, which is a multiple of the 4-centade cycle of the secular Calendar. So the Easter Sunday cycle is 5,700,000 years.

Full Easter Day Calculation from Tables I-III

The core of Table III has 19 columns indexed by the Golden Number, and 30 rows of which the 29th is split after column 11. The rows correspond with 29 different possible dates, March 21 to April 18, for the PFM. April 17 & 18 each also have one of the parts of the split row. The entries are the Cyphers of Table II.

Entries in the top core row of Table III in the Book are, on inspection, seen to be given by TR = (GN×11 - 3) mod 30

Moving down each row, the entries increase by one each time, with 0 following 29.

The distance by which one must descend the column belonging to the Golden Number to get the desired Cypher is the number of days by which the indicated PFM is after March 21st, subject to adjustment for the effect of the split row.

JavaScript

In the box below, function JRSEaster and the functions that it calls now sometimes use Mod(x,y) instead of x%y to allow negative years and Div(x,y) instead of Math.floor(x,y) or (x/y)|0 for clarity. Function jrsEaster is the same algorithm, modified for speed and limited to non-negative years before AD 4,000,000,000 or more. EGR is the known-good value, given by function EGREaster.

As Tables I-III.   The buttons call DemoFullCalc
 
     
Easter :        
Epact tests : Empiric :   Madore : OK
 
    BCPAllEaster JRSEaster ; for Y≥0 jrsEaster EGREaster
  (window.status shows progress, if enabled)

  P4 3GHz XP sp2 IE6 : 8 seconds.

Inputs accept expressions. Function BCPAllEaster is modular and not optimised, since I want it to manifest its derivation from BCP. Function JRSEaster is self-contained, apart from Div and Mod. Function jrsEaster is self-contained, and faster. Functions EGREaster and jrsEaster are called only for non-negative years.

C code would be similar, with ((a/b)|0) replaced by (a/b).

August 2008 : I have now read Knuth's algorithm, which is fast. That has suggested the following changes to the second xx line of jrsEaster; that xx is equivalent to the Sunday Letter.
  • Replace YR + ((YR/4)|0) by its evident equivalent ((5*YR/4)|0).
  • Replace - xx + ((YR/400)|0) by minus the result of ((3*(xx+1)/4)|0) (the Solar Correction, which represents the effect of the 100- and 400- year rules). the second equality.
Tests show correct results, and that each change improves speed. For ideal traceability, the second change should be justified by simulated a priori reasoning.
The new code can be tested either in Test a Provided Function or, using code in estralgs.txt, at a command prompt supporting WSH.
Pascal/Delphi

Function jrsEaster has been translated into Pascal/Delphi and tested, in paschal.pas; there, procedure myEaster gives the result as Month and Day numbers.

procedure myEaster(var Mo, Dy : byte ; const Yr {Greg.} : cardinal) ;
  (* Fast JRSEaster, unsigned 32-bit year - Delphi
     TRACEABLE via estr-bcp.htm (qv) to Prayer Book + Calendar Act *)
var gn, xx, cy, DM : integer ;
begin
  gn := YR mod 19 ;                             { gn ~ GoldenNumber }
  xx := YR div 100 ;
  cy := 3*(xx+1) div 4 - (13+xx*8) div 25 ;     { cy ~ BCPcypher }
  xx := ( 6 + YR + YR div 4 - xx + YR div 400 ) mod 7 ;
  DM := 21 + (gn*19 + cy + 15) mod 30 ;
  Dec(DM, Ord( Ord(gn>10) + DM > 49 )) ;        { PFM }
  Dy := DM + 1 + (66-xx-DM) mod 7 ;     { Day-of-March }
  Mo := 3 + Ord(Dy>31) ; if Dy>31 then Dec(Dy, 31) ;
  end {myEaster} ;
C

With the help of Rod Pemberton :-

#include <stdio.h>

int jrsEaster(int YR) { /* Fast JRSEaster, unsigned 32-bit year */
  int gn, xx, cy, DM;
  gn = YR % 19;                                  /* gn ~ GoldenNumber */
  xx = YR/100;
  cy = (3*(xx+1)/4) - ((13+xx*8)/25);            /* cy ~ BCPcypher */
  xx = ( 6 + YR + YR/4 - xx + YR/400 ) % 7;
  DM = 21 + (gn*19 + cy + 15)%30 ; DM -= ((gn>10) + DM > 49); /* PFM */
  return DM + 1 + (66-xx-DM)%7; /* Day-of-March */ }

With those declarations, / is integer division.

Windows XP Batch

See easter.bat; tested variously for years 0 to more than 5700000 (over the repeat interval).

PC Assembler

See Hugi Size Coding Competition #20, Sourcepack; but written before my algorithm.

Others

Any offers? Java and PowerShell should be easy enough.

Faster Easter Code

Optimised Easter code from Al Petrofsky, for Julian, short Gregorian, and full Gregorian, is in More algorithms for Easter Sunday as Day-of-March. It minimises the number of basic arithmetic operations used, by transformations. Therefore, the routines need proof of those transformations in order to be formally traceable to the prime standards. The routines have been tested (in Test a Reader-Provided Function) over ranges sufficient to prove correctness.

Traceability to the National Standard

One can expect that the Prayer Book has always represented the expressed intentions of British Law. My copy is, as far as matters, in full agreement with the annexe (pp. 205 ff) to the Act (pp. 186 ff) in Statutes at Large 1765, updated for change of century.

The routines derived above from my copy of the Prayer Book are substantially traceable to the applicable National Standard, which is the British Calendar (New Style) Act (1750 c.23) and its annexed material, as amended. I know of no subsequent legislation intended to affect the Gregorian Calendar or the Date of Easter, apart from the unimplemented Act of 1928.

The remaining exception to traceability is the long-term (outside 1600-8600) behaviour of the Lunar Correction used in the stage represented by BCP Table II, defined by neither Act not Book; but there is no doubt about what it should be.

The UK Statute Law Database site (seek year 1750) shows the current state of legislation (but see below). This link should be to the current entry for the Act in the Database.

For links to transcriptions of the original Act, some omitting the Annexes, see in Date Links.

Database : Pages Annexed to the Calendar Act

The Easter part of the Annexe in the Database is not as good as that in the present Prayer Book and that in the original Annexe.

In May 2007, I noticed that the version of the Act then on the UK Statute Law Database website (which shows legislation as currently applicable) lacked the essential definition of the Golden Number and the proper instructions for using its Table for 1900-2199. I reported that, and by 2007-06-11 the page images had been replaced showing additional notes but without fundamental change. That material is in the Prayer Book and was in the Act of 1751, as shown by Statutes at Large 1765.

The Table for 1900-2199 needs the Sunday Letter which can only be found by recourse to the following Table I.

The last four of the seven Database images (here called 1-7) — "TABLE to find EASTER-DAY from the year 1900 to the year 2199 inclusive.", "... TABLE I.", TABLE II.", "TABLE III." — are of most immediate interest. The last three are in agreement with the Act of 1751.

My Book of Common Prayer,
pages 33, 37, 38, 39

Book p.33 Book p.37

Book p.38 Book p.39
Should rescan?

The Easter Section of my copy of the Book comprises pp.31-39, as above. At 2007-06-11 and 2008-01-21, the Database contained images corresponding to my copy of the Prayer Book as shown in this Table.

Page Number Correspondence between BCP and SLD
BCP 313233343536373839
SLD W 1 2### 3 45 6 -
SLD T - -4## 3 #5 6 7
T : Tables ; W : words ; # : missing ; - : BCP has none

The material on Book pages 31, 32, 34, 35, 36, and 37 is not needed for the development of the Easter Algorithms. But that on Book pages 33 (words), 38, and 39 is essential, and there was nothing in the Database corresponding to the text of Book page 33, of which the second paragraph is manifestly indispensable.

Database "1900-2199" contained the Table of Book page 33, referring to 1900-2199. But its text resembled that of Book page 37, there used for future years.

At 2007-06-11, there was still no Database definition of the Golden Number, and no indication of how to use the Database Table for 1900-2199. The Statutory Publications Office have looked into the matter, and (2007-06-19) remain satisfied that their Database accurately reflects the current state of amendment of the Act.

On 2009-09-09, I saw that, in the Database, the image of the page for 1900 to 2199 had been replaced by a second copy of the preceding page, "... according to the several Days ...". Observed as repaired, 2009-10-12.

See also my The Date of Easter Sunday,
The Dates of Moveable Feasts & Fasts, Annual Holiday Dates,
Date and Time Index and Links,
Date Miscellany I, Date Miscellany II,
Zeller's Formulae and Papers, and The Hebrew Calendar.
Home Page
Mail: no HTML
© Dr J R Stockton, near London, UK.
All Rights Reserved.
These pages are tested mainly with Firefox 3.0 and W3's Tidy.
This site, http://www.merlyn.demon.co.uk/, is maintained by me.
Head.