Degenerate Conic

Algorithms • Modern Fortran Programming • Orbital Mechanics

Aug 24, 2014

Computus

eggs

The Computus is the algorithm for the calculation of the date of Easter. The following is a simple Fortran subroutine of the Computus, using the "Meeus/Jones/Butcher" Gregorian Easter algorithm. Note that this subroutine makes use of Fortran integer division.

subroutine easter(year,month,day)
!Compute the date of Gregorian Easter,
! using the "Meeus/Jones/Butcher" algorithm

implicit none

integer,intent(in) :: year
integer,intent(out) :: month,day

integer :: a,b,c,d,e,f,g,h,i,k,l,m

a = mod(year,19)
b = year/100
c = mod(year,100)
d = b/4
e = mod(b,4)
f = (b+8)/25
g = (b-f+1)/3
h = mod((19*a+b-d-g+15),30)
i = c/4
k = mod(c,4)
l = mod((32+2*e+2*i-h-k),7)
m = (a+11*h+22*l)/451
month = (h+l-7*m+114)/31
day = mod(h+l-7*m+114,31)+1

end subroutine easter

The sequence of dates repeat themselves over a cycle of 5,700,000 years. The following histogram shows the percentage occurrence of each date (from March 22nd to April 25th), over the entire cycle:

easter2

See also

  1. D. Steel, "Marking Time: The Epic Quest to Invent the Perfect Calendar", Wiley, 1999.
  2. J. R. Stockton, "The Calculation of Easter Sunday after the Book of Common Prayer of the Church of England".