Die Osterrechnung des Dionysius Exiguus

Karl-Heinz Lewin

Die Ostertafel des Dionysius Exiguus beginnt mit dem 19-Jahre-Zyklus ab 532 u.Z.:

Ciclus ab incarnatione domini secundum dionysium abbatem ordinatus

(Zyklus ab der Fleischwerdung unseres Herrn nach dem Abt Dionysius geordnet)

Incipit cyclus decemnovennalis, quem Græci Enneacaidecaeterida vocant, constitutus a sanctis Patribus, in quo quartas decimas paschales omni tempore sine ulla reperies falsitate; tantum memineris annis singulis, qui cyclus lunæ et qui decemnovennalis existat. In præsenti namque tertia indictio est, consulatu Probi junioris, tertius decimus circulus decemnovennalis, decimus lunaris est.

Zunächst gibt es den neunzehnjährigen Zyklus, den die Griechen Enneakaidekaeterida nennen, der von den heiligen [Kirchen-]Vätern festgelegt wurde und nach dem sich die österlichen vierzehnten Mondtage zu jeder Zeit als fehlerfrei erweisen; man braucht sich nur zu erinnern, welcher Mondzyklus und welcher neunzehnjährige Zyklus in jedem Jahr besteht. Im gegenwärtigen Jahr, nämlich dem dritten der Indiktion und Jahr des Konsulats von Probus junior, ist es der zehnte Mond im dreizehnten neunzehnjährigen Zyklus.

[...]

Cycli incipiunt anno DXXXII

   ANNI DO-     QUAE    EPA-    CON-    QUO-     QUOTA SIT       DIES DO-        LUNA
   MINI         SINT    CTAE    CUR-    TUS      LUNA  XIIII     MINICAE         IPSIUS
   NOSTRI       INDI-   I.E.    REN-    SIT-     PASCHALIS       FESTIVI-        DIEI
   IESU         CTIO-   ADIE-   TES     LUNAE                    TATIS           DOMI-
   CHRISTI      NES     CTIO-   DIES    CIR-                                     NICI
                        NES             CU-
                        LUNA-           LUS
                        RES

 B DXXXII       X       nulla   IIII    XVII     NON.APR.        III ID.Apr.     XX
   DXXXIII      XI      XI      V       XVIII    VIII KAL.APR.   VI KAL.APR.     XVI
   DXXXIIII     XII     XXII    VI      XVIIII   ID.Apr.         XVI KAL.MAI.    XVII
   DXXXV        XIII    III     VII     I        IIII NON.APR.   VI ID.Apr.      XX
 B DXXXVI       XIIII   XIIII   II      II       XI KAL.APR.     X KAL.APR.      XV
   DXXXVII      XV      XXV     III     III      IIII ID.Apr.    II ID.Apr.      XVI
   DXXXVIII     I       VI      IIII    IIII     III KAL.APR.    II NON.APR.     XVIIII
   DXXXVIIII    II      XVII    V       V        XIIII KAL.MAI.  VIII KAL.MAI.   XX       ogd.
 B DXL          III     XXVIII  VII     VI       VII ID.Apr.     VI ID.Apr.      XV
   DXLI         IIII    VIIII   I       VII      VI KAL.APR.     II KAL.APR.     XVIII
   DXLII        V       XX      II      VIII     XVII KAL.MAI.   XII KAL.MAI.    XVIIII
   DXLIII       VI      I       III     VIIII    II NON.APR.     NON.APR.        XV
 B DXLIIII      VII     XII     V       X        VIIII KAL.APR.  VI KAL.APR.     XVII
   DXLV         VIII    XXIII   VI      XI       II ID.Apr.      XVI KAL.MAI.    XVIII
   DXLVI        VIIII   IIII    VII     XII      KAL.APR.        VI ID.Apr.      XXI
   DXLVII       X       XV      I       XIII     XII KAL.APR.    VIIII KAL.APR.  XVII
 B DXLVIII      XI      XXVI    III     XIIII    V ID.Apr.       II ID.Apr.      XVII
   DXLVIIII     XII     VII     IIII    XV       IIII KAL.APR.   II NON.APR.     XX
   DL           XIII    XVIII   V       XVI      XV KAL.MAI.     VIII KAL.MAI.   XXI      hend.

[DE2]

Für die folgenden Rechenvorschriften sei definiert: function mod1(a, b) { m = a mod b; return m ? m : b; }

Überschrift: Cycli incipiunt anno DXXXII = Die Zyklen beginnen im Jahre 532

Spalte 1 (ohne Spaltenüberschrift): Anzeige, ob das Jahr Schaltjahr ist (B, nach dem Schalttag bissextus, dem verdoppelten Tag VI Kal. Mar.) oder nicht ( ).
Berechnung: sj = ( j mod 4 ) ? 0 : 1

Spalte 2: Anni Domini Nostri Iesu Christi = Die Jahre unseres Herrn Jesus Christus
Die Jahreszahl (im Weiteren: j ) wird als gegeben vorausgesetzt.

Spalte 3: Quae sint Indictiones = Was sind die Indiktionen
Berechnung: ind = mod1( j+3, 15 )
[DE3, Argument 2]

Spalte 4: Epactae i.e. adiectiones lunares = Epakte, d.h. Zuwachstage des Mondes.
Berechnung: epa = (( j mod 19 ) * 11 ) mod 30
[DE3, Argument 3]

Spalte 5: Concurrentes dies = Konkurrententage
Berechnung: con = mod1( Floor( j * 5 / 4 ) + 4, 7 )
[DE3, Argument 4]

Spalte 6: Quotus sit lunae circulus = Was der Mondzirkel ist
Berechnung: luc = mod1( j - 2, 19 )
[DE3, Argument 6]

Zwischenschritt a: Das Mondalter des 22. März (XI Kal. Apr.)
Berechnung: luXIKA = mod1(( j mod 19 ) * 11, 30 )
[DE3, Argument 11]

Spalte 7: Quota sit luna XIIII paschalis = Was der Ostermond ist
Berechnung: lu14 = luXIKA <= 15 ? 36 – luXIKA : 66 – luXIKA
lu14 nimmt die Werte 21 bis 50 an,
21 bis 31 ist das Datum im März, andernfalls ist (lu14 – 31) das Datum im April.

Zwischenschritt b: Wochentag des Ostermondes
Berechnung: wt14 = mod1( 60 + lu14 + con, 7 )
wt14 nimmt die Werte 1 bis 7 an, 1 => So, 2 => Mo, ..., 7 => Sa
[DE3, Argument 10]

Zwischenschritt c: Wochentag des Ostermondes, alternative Berechnung
Berechnung: if ( lu14 <= 31 ) { t = 36 – epa; if ( t > 30 ) t = t – 30; t += con + 4 }
else { t = 35 – epa; if ( t > 30 ) t = t – 30; t += con + 7 }
wt14a = mod1( t, 7 )
[DE3, Argument 14]

Spalte 8: Dies dominicae festivitatis = Ostersonntag
Berechnung: os = lu14 + 8 – wt14
os nimmt die Werte 22 bis 57 an,
22 bis 31 ist das Datum im März, andernfalls ist (os – 31) das Datum im April.

Spalte 9: Luna ipsius diei dominici = Mondalter dieses Ostersonntags
Berechnung: if ( os <= 31 ) { lu = 8 + epa + os } else { lu = 9 + epa + os – 31 }
luos = mod1( lu, 30 )
[DE3, Argument 9]

Spalte 10 (ohne Spaltenüberschrift): zeigt an, wann das 8. Jahr des Zyklus ("ogd." = Ogdoas) und wann das 11. Jahr der verbleibenden Jahre des Zyklus ("hend." = Hendekas) erreicht ist.

Die Anzeigen in den Spalten ohne Spaltenüberschriften (Spalte 1 und Spalte 10) ignoriere ich in den folgenden Programmbeispielen als unbedeutend.

Implementierung in einem Tabellenkalkulatiosnprogramm

(Hier Microsoft Excel 2007, deutschsprachige Lizenz)

Hinweis: Die alternative Berechnung des Wochentags des Ostermonds entfällt hier, da zu aufwändig.

Feld

Inhalt

Bedeutung

A1

'ADNIC

Jahreszahl

B1

'Indic

Indiktion

C1

Zs

Zwischenschritt

D1

'Epact

Epakten

E1

'Concurr

Konkurrente

F1

'Lu Ci

Mondzirkel

G1

'Lu XIKA

Mondalter 22. März

H1

'LuXIV

Ostermond

I1

'WtLuXIV

Wochentag des Ostermondes

J1

'Do Pasc

Ostersonntag

K1

'Lu Do Pasc

Mondalter OS 1. Schritt

L1

'Lu Do Pasc

Mondalter des Ostersonntags

A2

532

532

B2

=WENN(REST(A2+3;15);REST(A2+3;15);15)

C2

=REST(A2;19)*11

D2

=REST(C21;30)

E2

=WENN(REST(GANZZAHL(A2*5/4+4);7);REST(GANZZAHL(A2*5/4+4);7);7)

F2

=WENN(REST(A2+17;19);REST(A2+17;19);19)

G2

=WENN(REST(C2;30);REST(C2;30);30)

H2

=WENN(G2<=15;36-G2;66-G2)

I2

=WENN(REST(60+H2+E2;7); REST(60+H2+E2;7); 7)

J2

=H2+8-I2

K2

=WENN(J2<=31;8+D2+J2;9+D2+J2-31)

L2

=WENN(REST(K2;30); REST(K2;30);30)

A3

=A2+1

B3:L3

Kopie von B2:L2

A4:L96

Kopie von A3:L3


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 mod1( a, b ) {
		var m = a % b ;
		return m ? m : b ;
	}
	
	function ExiguusEasterTableLine( annus ) {
		// assert( annus > 0 && annus <= 4999 );
		var date;
		this.an = annus;
		this.ind = mod1( annus + 3, 15 );
		this.epa = (( annus % 19 ) * 11 ) % 30;
		this.con = mod1( floor( annus * 5 / 4 + 4), 7 );
		this.luc = mod1( annus + 17, 19 );
		this.luXIKA = mod1(( annus % 19 ) * 11, 30 );
		this.lu14 = this.luXIKA <= 15 ? 36 – this.luXIKA : 66 – this.luXIKA;
		this.wt14 = mod1( 60 + lu14 + con, 7 );
		if ( lu14 <= 31 ) { 
			t = 36 -– epa; 
			if ( t > 30 ) t = t –- 30; 
			t += con + 4 
		} else { 
			t = 35 –- epa; 
			if ( t > 30 ) t = t -– 30;
			t += con + 7 
		}
		this.wt14a = mod1( t, 7 );
		this.os = lu14 + 8 – this.wt14;
		var lu = os <= 31 ? 8 + epa + os : 9 + epa + os – 31;
		this.luos = mod1( lu, 30 );
		return this;
	}
	
	function ExiguusEasterTable( annus, times ) {
		// assert( annus > 0 && annus <= 4996 );
		// assert( times >= 4 && times <= 532 );
		// assert( annus + times <= 5000 );
		for ( let j = annus; j < annus + times; j++ ) {
			var line = ExiguusEasterTableLine( j );
			generateExiguusEasterTableOutput( 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 Ostertafel des Dionysius Exiguus eine nach dem soeben erschlossenen Algorithmus mit den gezeigten JavaScript-Funktionen erzeugte Neuberechnung der Daten, wobei in dieser neu berechneten Tabelle die erste Spalte mit der des Schaltjahrs und die letzte Spalte mit der Anzeige der Ogdoade und Hendekade als für die Berechnung unwesentlich entfallen.
Einen Osterrechner mit diesem Algorithmus, bei dem Sie das Startjahr, die Anzahl der Jahre und das Ausgabeformat wählen können, finden Sie unter Die Ostertafel des Dionysius Exiguus als Tabellenrechner.



Literatur

DE2 = Dionysius Exiguus (525): Ciclus ab incarnatione domini secundum dionysium abbatem ordinatus; <https://web.archive.org/web/20220928223629/http://www.nabkal.de/osterstreit/anhang/dionysius_2.html> s. auch DELP, DEOE

DE3 = Dionysius Exiguus (525): Argumenta Paschalia Aegyptiorum; <https://web.archive.org/web/20221014111543/http://www.nabkal.de/osterstreit/anhang/dionysius_3.html> s. auch DELP, DEOE

DELP = Dionysius Exiguus (2003): Liber de Paschate; <http://henk-reints.nl/cal/audette/denys.html>

DEOE = Dionysius Exiguus (2003): On Easter, or, the Paschal Cycle; <https://www.tertullian.org/fathers/dionysius_exiguus_easter_01.htm>


Der Autor ist Mathematiker und arbeitete als Software-Entwickler.

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

Copyright © Karl-Heinz Lewin, 2024