Die Osterrechnung von Carl Friedrich Gauß

Karl-Heinz Lewin

Ich verwende hier die Formeln für den Julianischen Kalender aus dem Artikel Gaußsche Osterformel der deutschen Wikipedia (sowie eine zusätzliche für den Ostermond):


Julianischer Kalender Gregorianischer Kalender Bedeutung
a = Jahr mod 19 a = Jahr mod 19 Mondparameter
b = Jahr mod 4 b = Jahr mod 4
c = Jahr mod 7 c = Jahr mod 7
k = Jahr 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
Falls d=29 oder d=28 und a > 10,
dann d = d - 1   (1)
Keim für den ersten Vollmond im Frühling
om = 21 + d om = 21 + d Tag des Ostermonds, des. ersten Frühlingsvollmonds, gezählt ab 1. März
N = 6 N = (4 + k - q) mod 7
e = (2b + 4c + 6d + N) mod 7 e = (2b + 4c + 6d + N) mod 7 Entfernung des Ostersonntags von der Ostergrenze (d.i. vom Ostermond)
os = 22 + d + e
(Die Bedingungen für die Korrektur
treten hier nicht auf.)
os = 22 + d + e
Wikipedia hat hier die Ausnahmen:   (2) (3)
Falls d=28 und e=6 und a>10, dann os=49
Falls d=29 und e=6, dann os=50
Tag des Ostersonntags, gezählt ab 1. März

Anmerkungen:

(1) Die Korrektur ist entlehnt aus dem "Astronomischen Osterrechner" von Nikolaus Alexander Bär, siehe im Quelltext einer der beiden im Literaturverzeichnis angegebenen HTML-Seiten, dort jeweils im Javascript-Code in der "function EastCalc".
Bär hatte die Korrektur bei der Berechnung des zyklischen Ostermonds "luna", den ich hier "om" nenne; ich bringe die entsprechende Korrektur gleich bei der Variablen "d" an.

(2) Dank der Korrektur von d (s. Anm. (1)) erübrigt sich die Korrektur des Ostersonntags, denn:
War vorher d=29 und e=6, dann ergaben sich
om = 21 + d = 21 + 29 = 50 → 19. April,
os = 22 + d + e = 22 + 29 + 6 = 57 → 26. April,
letzteres wurde korrigiert zu os = 50 → 19. April.
Nunmehr wird korrgiert zu d = 28 und damit e = 0, woraus sich ergeben
om = 21 + d = 21 + 28 = 49 → 18. April,
os = 22 + d + e = 22 + 28 + 0 = 50 → 19. April!
War vorher d=28 und e=6 (und a > 10), dann ergaben sich
om = 21 + d = 21 + 28 = 49 → 18. April,
os = 22 + d + e = 22 + 28 + 6 = 56 → 25. April,
letzteres wurde korrigiert zu os = 49 → 18. April.
Nunmehr wird korrgiert zu d = 27 und damit e = 0, woraus sich ergeben
om = 21 + d = 21 + 27 = 48 → 17. April,
os = 22 + d + e = 22 + 27 + 0 = 49 → 18. April!

(3) Mit der angegebenen Regel für d=28 sind nicht alle liturgisch erforderlichen Ausnahmefälle abgedeckt. Dies betrifft die "Ausnahmeregel Nr.2" in [Voigt 146]. Die Gaußsche Osterformel versagt daher in den Jahren 1954, 2049, 3165, 3260, 3317, 4080 und 4099 [Voigt 148]. Dies kann mit dem Vergleichsrechner für den Gregorianischen Kalender leicht nachgeprüft werden: Der Ostermond liegt in diesen Jahren bei Gauß auf dem Tag, auf dem bei den Vergleichsalgorithmen (Donald Knuth und Claus Tøndering) der Ostersonntag liegt (18. April), und Ostersonntag ist bei Gauß eine Woche später, am 25. April.
Natürlich gibt es solche "Ausrutscher" auch in der Zeit bis 1582, wenn man die Algorithmen auch für diese Zeiten vergleichen möchte, aber das hat noch niemand nachgerechnet, weil es keine praktische Bedeutung hat.


Implementierung in einem Tabellenkalkulatiosnprogramm

(Hier Microsoft Excel 2007, deutschsprachige Lizenz)

Ich zeige hier nur die Lösung für den Julianischen Kalender.

Feld

Inhalt

Bedeutung

A1

'Jahr

Jahreszahl

B1

'a

Mondparameter

C1

'b

D1

'c

E1

'd

Keim für den ersten Vollmond im Frühling

F1

'e

Entfernung des Ostersonntags vom Ostermond

G1

'om

Tag des Ostermonds, gezählt ab 1. März

H1

'os

Tag des Ostersonntags, gezählt ab 1. März

A2

532

Startjahr

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

Kopie von B2:H2

A4:H96

Kopie von A3:H3

Ausgabe

  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
 ...


Implementierung in JavaScript

	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 );
		}
	}


Die formelle Überprüfung des Algorithmus

Wenn Sie auf den unten folgenden Knopf klicken, dann erscheint zum Vergleich mit dem weiter oben gezeigten ersten 19-jährigen Abschnitt der Ausgabe des Tabellenkalkulationsprogramms eine nach dem soeben erschlossenen Algorithmus mit den gezeigten JavaScript-Funktionen erzeugte Berechnung der Ostermond- und Ostersonntagsdaten mit allen Zwischenergebnissen..
Einen Osterrechner mit diesem Algorithmus, bei dem Sie das Startjahr, die Anzahl der Jahre und die Art des Kalenders (Julianisch, Gregorianisch, Abendländisch (d.h. Julianisch bis 1582, Gregorianisch ab 1583)) wählen können, finden Sie unter Die Osterrechnung von Carl Friedrich Gauß als Tabellenrechner.



Literatur

Bär, Nikolaus Alexander (2006): Berechnung des Osterdatums - Astronomischer Osterrechner; https://web.archive.org/web/20230409000000*/http://www.nabkal.de:80/ostrech2.html; oder: Astronomischer Osterrechner, Rechner pur; https://web.archive.org/web/20220928000000*/http://www.nabkal.de:80/osterrechner2.html

de.wikipedia: Stichwort Gaußsche Osterformel

Voigt, Ulrich (2003): Das Jahr im Kopf. Kalender und Mnemotechnik; Likanas Verlag, Hamburg


Der Autor ist Mathematiker und arbeitete als Software-Entwickler.

Karl-Heinz Lewin, Haar: karl-heinz.lewin@t-online.de

Copyright © Karl-Heinz Lewin, 2024