On 2008-11-04, Gerhard Zeller of the Martinszeller-Verein kindly sent me an image† of a card (eine Postkarte) which had been produced by Rektor Christian Zeller to summarise his date methods for his family and others. I do not know exactly when the Card was produced, but it was cited on 1886-06-03.
Translated by me, with help from Claus Tøndering, and Claudia & Ian Barnes, late 2008.
Rule. In the old Calendar the sum q + 2m + (3m+3)/5 + A + A/4 in the new Calendar this sum reduced by (A/100 - A/400 - 2) then divide by 7, the remainder is the number of the day-of-week required.
Fractions are omitted ; Jan. and Feb. are to be taken as the 13th and 14th months of the previous year. If the division is exact, use 7 for the remainder.
Rule. In the old Cal. the sum
19 A - A/19 + 15
in the new Cal. this sum increased by
(A/100 - A/300 - A/400)
then divide by 30; the remainder b
[ With the highlighted
adjustment of Task 3 done here instead, by decrementing b in those two
cases, the Paschal Full Moon will always be correct. ]
shows how many days after March 21st the Paschal Full Moon will be.
Rule. In the old Cal. 6-times A/4 - A - b
[ This
interpretation works : 6×(A/4) - A - b ]
in the new Cal. this increased by (A/100 - A/400 - 2)
then divide by 7; the remainder gives how many days after the
Paschal Full Moon the Easter festival is.
If the division is exact, use 7 as the remainder ; 0 only in two rare exceptional cases: when b=28 and when also by the division A/19 the remainder is more than 10, or when b=29 will be [ With that there, one always gets a correct Easter date, so the Paschal Full Moon must then sometimes be wrong. ].
The calculations will be shorter if the sums that are to be divided by 7 or 30 are reduced by multiples of 7 or 30 during the summation.
Reproduction prohibited ; further copies are to be
had for 10 Pf. in the orphanage at Markgröningen
and from A. Müller, Stuttgart, Kronprinzstr. 3.
Zeller uses "Old Calendar" for the Julian Calendar, and "New Calendar" for the Gregorian Calendar.
The green-highlighted part of Task 3 is only to be used for the New Calendar.
If the Gregorian Paschal Full Moon date is to be always correct, the adjustment done by the highlighted part of Task 3 must be performed in Task 2.
Tests here can run from the beginning of fictitious year AD 0. Using the expressions on the Card, one can get, for rather early years, into mod-of-negative errors. Zeller, being pre-computer, would surely expect that in these cases the obvious correction would be made; and he might not have cared to cover such extreme cases anyway.
Otherwise, I have found no cases where mod-of-negative might occur. Where division by 7 gives 0, the Card says (generally) that 7 should be used instead.
Consider Likely Errors in Implementations and Common Notes, written for the papers of 1882 to 1886.
Zeller does not actually here define the Day-of-Week numbering, which is the obvious Sun=1 to Sat=7.
Tests verify Task 1, for both calendars, for all dates after AD 0000-02-29, before which A becomes negative. One can add a multiple of 28 or 400, such as 2800, years.
For some years in the zeroth centade, the first expression in Task 3 gives a negative result, leading to a mod 7 error and giving Easter a week too early. Easter was not defined in that centade, but it is nice to be able to use any non-negative year. The remedy is to add a sufficient multiple of 7, for which 77 suffices.
A full test, covering the Julian repeat interval of 532 years, confirms Task 3 (with the questionable part not applied, and using 77 as above) for the date of Julian Easter Sunday, which implies that the Old Calendar part of Task 2 is also correct.
Tests do not confirm the unmodified algorithm of Tasks 2 & 3 for the date of Gregorian Easter Sunday, although most years are correct.
Task 2 uses, for the New Calendar only, a division by 300. The only corresponding divisions in the four Papers are in the 1886 paper : by 3 in II.1.B.2 (but see the following Note 1) and by 300 in its Afterword (Nachtrag). Because A/300 is used, the printed method is not valid before the year AD 1500 or after the year AD 4199.
Most of the second paragraph of Task 3, "0 nur in zwei ... wird.", only applies to the New Calendar; and that the adjustment should really be applied in Task 2. It represents a complication in the determination of the Gregorian Paschal Full Moon, introduced for complex reasons. Also, as placed in the Card, it breaks the logic that Easter Sunday is always after the day of the Paschal Full Moon. However, the Card does give a correct value for the date of Easter Sunday.
Task 3, when without ; 0 ... wird (Note 2), is doing what it should do to go from Paschal Full Moon to Easter Sunday, for both Calendars.
With the adjustment performed in Task 2, correct dates are always given for both the Paschal Full Moon and Easter Sunday.
The Gregorian Easter test has been run over the full cycle of 5700000 years.
"10 Pf." means [a price of] ten pfennigs (a tenth of a Mark) - almost a penny-farthing (1¼d) in British money of the time, and about €?.?? in current money.
In currencies of the time, German gold mark gives 10 Mark = 3.58 g gold, and Pound sterling says that 1 sovereign contained 7.3 g gold. Therefore 10 Pf was equivalent to 1.184 d. Considering only the value of gold, that might be roughly £0.70 or €0.90 in mid-2008 currency.
For the Gregorian-Julian date difference (GJdif), see in Date and Time Scales.
Code lines marked // Z represent operations given in the Card; lines marked // J represent my adjustments to the Easter algorithm; the unmarked lines are for testing.
In the code, ((X/Y)|0) or (X/Y|0) is faster than Math.floor(X/Y), which in C would be X\Y and in Pascal X div Y, integer division; and X%Y is Pascal X mod Y, the remainder operation.
The "known good" Easter routines have been fully tested against trustworthy sources.
Paschal Full Moon (PFM) and Easter Sunday (ESu) have been successfully tested in Opera 9.27 from Year 0 over more than one full cycle of each calendar.