Here I use the formulas for the Julian calendar from the article Gaußsche Osterformel from the German Wikipedia (as well as an additional one for the Easter moon):
Julian calendar | Gregorian calendar | Meaning |
a = year mod 19 | a = year mod 19 | Moon parameter |
b = year mod 4 | b = year mod 4 | |
c = year mod 7 | c = year mod 7 | |
k = year div 100 | ||
p = (8k + 13) div 25 | ||
q = k div 4 | ||
M = 15 | M = (15 + k - p - q) mod 30 | |
d = (19a + M) mod 30 | d = (19a + M) mod 30
If d=29 or d=28 and a > 10, then d = d - 1 (1) |
Germ for the first full moon in spring |
om = 21 + d | om = 21 + d | Day of the Easter moon, the first full moon of spring, counted from 1 March |
N = 6 | N = (4 + k - q) mod 7 | |
e = (2b + 4c + 6d + N) mod 7 | e = (2b + 4c + 6d + N) mod 7 | Distance of Easter Sunday from the Easter border (i.e. from the Easter moon) |
os = 22 + d + e
(The conditions for the correction do not occur here.) |
os = 22 + d + e
Wikipedia here has the exceptions: (2) (3) If d=28 and e=6 and a>10, then os=49 If d=29 and e=6, then os=50 |
Day of Easter Sunday, counted from 1 March |
Anmerkungen:
(1) The correction is borrowed from the "Astronomischer Osterrechner" by Nikolaus Alexander Bär,
see the source code of one of the two HTML pages listed in the bibliography, there respectively
in the Javascript code in the "function EastCalc".
Bär had the correction in the calculation of the cyclic Easter moon "luna",
which I call "om" here; I make the corresponding correction directly to the variable "d".
(2) Thanks to the correction of d (see note (1)), the correction of Easter Sunday is unnecessary, because:
If previously d=29 and e=6, then this resulted
om = 21 + d = 21 + 29 = 50 → 19 April,
os = 22 + d + e = 22 + 29 + 6 = 57 → 26 April,
the latter was corrected to os = 50 → 19 April.
Now it is corrected to d = 28 and thus e = 0, resulting in
om = 21 + d = 21 + 28 = 49 → 18 April,
os = 22 + d + e = 22 + 28 + 0 = 50 → 19 April!
If d=28 and e=6 (and a > 10), then the result is
om = 21 + d = 21 + 28 = 49 → 18 April,
os = 22 + d + e = 22 + 28 + 6 = 56 → 25 April,
the latter has been corrected to os = 49 → 18 April.
Now it is corrected to d = 27 and thus e = 0, which results in
om = 21 + d = 21 + 27 = 48 → 17 April,
os = 22 + d + e = 22 + 27 + 0 = 49 → 18 April!
(3) The stated rule for d=28 does not cover all liturgically necessary exceptional cases.
This concerns "Exception Rule No.2" in [Voigt 146].
The Gaussian Easter formula therefore fails in the years 1954, 2049, 3165, 3260, 3317, 4080 and 4099 [Voigt 148].
This can be easily checked with the comparison calculator
for the Gregorian calendar:
In these years the Easter moon is with Gauß on the day on which with the comparison algorithms
(Donald Knuth and
Claus Tøndering)
is Easter Sunday (18 April), and Easter Sunday
is with Gauß a week later, on 25 April.
Of course, there are also such "slips" in the period up to 1582,
if you also want to compare the algorithms for these periods,
but nobody has done the maths yet because it has no practical significance.
(Here Microsoft Excel 2007, German licence)
I am only showing the solution for the Julian calendar here.
Field |
Contents |
Meaning |
A1 |
'Year |
Year number |
B1 |
'a |
Moon parameter |
C1 |
'b |
|
D1 |
'c |
|
E1 |
'd |
Germ for the first full moon in spring |
F1 |
'e |
Distance of Easter Sunday from the Easter moon |
G1 |
'om |
Day of the Easter moon, counted from 1 March |
H1 |
'os |
Day of Easter Sunday, counted from 1 March |
A2 |
532 |
Start year |
B2 |
=REST(A2;19) |
|
C2 |
=REST(A2;4) |
|
D2 |
=REST(A2;7) |
|
E2 |
=REST((19*B2+15);30) |
|
F2 |
=REST((2*C2+4*D2+6*E2+6);7) |
|
G2 |
=21+E2 |
|
H2 |
=22+E2+F2 |
|
A3 |
=A2+1 |
|
B3:H3 |
Copy of B2:H2 |
|
A4:H96 |
Copy of A3:H3 |
A B C D E F G H Jahr a b c d e om os 532 0 0 0 15 5 36 42 533 1 1 1 4 1 25 27 534 2 2 2 23 2 44 47 535 3 3 3 12 5 33 39 536 4 0 4 1 0 22 23 537 5 1 5 20 1 41 43 538 6 2 6 9 4 30 35 539 7 3 0 28 5 49 55 540 8 0 1 17 0 38 39 541 9 1 2 6 3 27 31 542 10 2 3 25 4 46 51 543 11 3 4 14 0 35 36 544 12 0 5 3 2 24 27 545 13 1 6 22 3 43 47 546 14 2 0 11 6 32 39 547 15 3 1 0 2 21 24 548 16 0 2 19 2 40 43 549 17 1 3 8 5 29 35 550 18 2 4 27 6 48 55 ...
function DaynumberToDayAndMonth( daynumber ) { // assert( daynumber > 0 && daynumber < 62 ); if ( daynumber <= 31 ) { this.dd = daynumber; this.mm = 3; } else { this.dd = daynumber - 31; this.mm = 4; } return this; } function div( a, b ) { // integer division return floor( a / b ); } function CFrGaussGregorianEasterTableLine( j ) { // assert( j >= 0 && j <= 4999 ); var k = div( j, 100 ); var p = div( 8 * k + 13, 25 ); var q = div( k, 4 ); var M = ( 15 + k - p - q ) % 30; this.g_d = ( 19 * this.g_a + M ) % 30; if ( this.g_d == 29 || this.g_g == 28 && this.g_a > 10 ) { this.g_d -- ; } var N = ( 4 + k - q ) % 7; this.g_e = ( 2 * this.g_b + 4 * this.g_c + 6 * this.g_d + N ) % 7; return this; } function CFrGaussJulianEasterTableLine( j ) { // assert( j >= 0 && j <= 4999 ); const M = 15; this.g_d = (( 19 * this.g_a + M ) % 30 ); const N = 6; this.g_e = ( 2 * this.g_b + 4 * this.g_c + 6 * this.g_d + N ) % 7; return this; } function CFrGaussEasterTableLine( j, cal ) { // assert( j >= 0 && j <= 4999 ); this.g_j = j; this.g_a = j % 19; this.g_b = j % 4; this.g_c = j % 7; switch ( cal ) { case 'J': // Julian calendar ee = CFrGaussJulianEasterTableLine( j ); break; case 'G': // Gregorian calendar ee = CFrGaussGregorianEasterTableLine( j ); break; case 'A': // Occidental calendar ("Abendländischer Kalender") ee = ( j <= 1582 ) ? CFrGaussJulianEasterTableLine( j ) : CFrGaussGregorianEasterTableLine( j ); break; } this.g_om = 21 + this.g_d; this.g_os = 22 + this.g_d + this.g_e; return this; } function CFrGaussEasterTable( annus, times, cal, outputformatter ) { // assert( annus >= 0 && annus <= 4996 ); // assert( times >= 4 && times <= 532 ); for ( let j = annus; j < annus + times; j++ ) { var line = CFrGaussEasterTableLine( j, cal ); outputformatter( line ); } }
If you click on the button below, you will see for a comparison with the first
19-year section of the spreadsheet program output shown above
a calculation of the Easter moon and Easter Sunday dates generated according to the algorithm just developed
with the shown JavaScript functions with all the intermediate results.
An Easter calculator with this algorithm, where you can enter the start year, the number of years
and the type of calendar (Julian, Gregorian, Occidental
(i.e. Julian until 1582, Gregorian from 1583))
can be found at
The Easter calculation by Carl Friedrich Gauß
as a table calculator.
Bär, Nikolaus Alexander (2006): Berechnung des Osterdatums - Astronomischer Osterrechner; http://www.nabkal.de:80/ostrech2.html; or: Astronomischer Osterrechner, Rechner pur; http://www.nabkal.de:80/osterrechner2.html
de.wikipedia: Keyword Gaußsche Osterformel
Voigt, Ulrich (2003): Das Jahr im Kopf. Kalender und Mnemotechnik; Likanas Verlag, Hamburg
The author is a mathematician and worked as a software developer.
Karl-Heinz Lewin, Haar: karl-heinz.lewin@t-online.de
Copyright © Karl-Heinz Lewin, 2024