The Easter calculation of Dionysius Exiguus

Karl-Heinz Lewin

The Easter table of Dionysius Exiguus begins with the 19-year cycle from 532 CE.:

Ciclus ab incarnatione domini secundum dionysium abbatem ordinatus

(Cycle from the Incarnation of our Lord organised according to Abbot Dionysius)

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.

Firstly, there is the nineteen-year cycle, which the Greeks call Enneakaidekaeterida, which was established by the holy [church] fathers and according to which the fourteenth days of the moon prove to be faultless at all times; one need only remember which lunar cycle and which nineteen-year cycle exists in each year. In the present year, namely the third of the indiction and year of the consulship of Probus junior, it is the tenth moon in the thirteenth nineteen-year cycle.

[...]

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]

For the following calculation rules is defined: function mod1(a, b) { m = a mod b; return m ? m : b; }

Heading: Cycli incipiunt anno DXXXII = The cycles begin in the year 532

Column 1 (without column caption): Display whether the year is a leap year (B, according to the leap day bissextus, the doubled day VI Kal. Mar.) or not ( ).
Calculation: sj = ( j mod 4 ) ? 0 : 1

Column 2: Anni Domini Nostri Iesu Christi = The years of our Lord Jesus Christ
The year (hereinafter: y ) is assumed to be given.

Column 3: Quae sint Indictiones = What are the indictions
Calculation: ind = mod1( j+3, 15 )
[DE3, Argument 2]

Column 4: Epactae i.e. adiectiones lunares = epacts, ie increments of the moon.
Calculation: epa = (( j mod 19 ) * 11 ) mod 30
[DE3, Argument 3]

Column 5: Concurrentes dies = concurrent days
Calculation: con = mod1( Floor( j * 5 / 4 ) + 4, 7 )
[DE3, Argument 4]

Column 6: Quotus sit lunae circulus = which is the circle of the moon
Calculation: luc = mod1( j - 2, 19 )
[DE3, Argument 6]

Intermediate step a: The age of the moon on 22 March(XI Kal. Apr.)
Calculation: luXIKA = mod1(( j mod 19 ) * 11, 30 )
[DE3, Argument 11]

Column 7: Quota sit luna XIIII paschalis = date of day 14 of the paschal moon
Calculation: lu14 = luXIKA <= 15 ? 36 – luXIKA : 66 – luXIKA
lu14 assumes the values 21 to 50,
21 to 31 is the date in March, otherwise (lu14 – 31) is the date in April.

Intermediate step b: Weekday of the Easter moon
Calculation: wt14 = mod1( 60 + lu14 + con, 7 )
wt14 assumes the values 1 to 7, 1 => Sun, 2 => Mon, ..., 7 => Sat
[DE3, Argument 10]

Intermediate step c: Weekday of the Easter moon, alternative Calculation
Calculation: 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]

Column 8: Dies dominicae festivitatis = Easter Sunday
Calculation: os = lu14 + 8 – wt14
os assumes the values 22 to 57,
22 to 31 is the date in March, otherwise (os – 31) is the date in April.

Column 9: Luna ipsius diei dominici = Moon age of this Easter Sunday
Calculation: if ( os <= 31 ) { lu = 8 + epa + os } else { lu = 9 + epa + os – 31 }
luos = mod1( lu, 30 )
[DE3, Argument 9]

Column 10 (without column caption): indicates when the 8th year of the cycle ("ogd." = Ogdoad) and when the 11th year of thhe remaining years of the cycle ("hend." = Hendekad) is reached.

I ignore the displays in the columns without column captions (column 1 and column 10) as insignificant in the following programme examples.

Implementation in a spreadsheet programme

(Here Microsoft Excel 2007, German licence)

Note: The alternative calculation of the weekday of the Easter moon is omitted here, because it is too much space-consuming.

Field

Contents

Meaning

A1

'ADNIC

Year number

B1

'Indic

Indiction

C1

'IS

Intermediate step

D1

'Epact

Epacts

E1

'Concurr

Concurrent days

F1

'Lu Ci

Lunar circle

G1

'Lu XIKA

Moon age on 22 March

H1

'LuXIV

Luna14

I1

'WtLuXIV

Weekday of Luna14

J1

'Do Pasc

Easter Sunday

K1

'Lu Do Pasc

Moon age ES 1st step

L1

'Lu Do Pasc

Moon age of Easter Sunday

A2

532

532

B2

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

C2

=REST(A2;19)*11

D2

=REST(C2;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)/P>

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

Copy from B2:L2

A4:L96

Copy from A3:L3


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


Formal verification of the algorithm

If you click on the button below, a new calculation of the data appears for comparison with the first 19-year section of the Easter table of Dionysius Exiguus shown above, generated according to the algorithm just developed with the JavaScript functions shown, whereby in this newly calculated table the first column with the indication of the leap year and the last column with the indication of the Ogdoad and Hendekad are omitted as insignificant for the calculation.
An Easter calculator with this algorithm, where you can choose the start year, the number of years and the output format, can be found at The Easter table of Dionysius Exiguus as a table calculator.



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> see also DELP, DEOE

DE3 = Dionysius Exiguus (525): Argumenta Paschalia Aegyptiorum; <https://web.archive.org/web/20221014111543/http://www.nabkal.de/osterstreit/anhang/dionysius_3.html> see also 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>


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