function [ m, d ] = easter_gregorian_ds ( y )

%*****************************************************************************80
%
%% easter_gregorian_ds() computes the month and day of Easter for a Gregorian year.
%
%  Example:
%
%    Input:
%
%      Y = 2000
%
%    Output:
%
%      M = 4
%      D = 23
%
%  Licensing:
%
%    This code is distributed under the MIT license.
%
%  Modified:
%
%    16 June 2012
%
%  Author:
%
%    John Burkardt
%
%  Reference:
%
%    Peter Duffett-Smith,
%    Practical Astronomy With Your Calculator,
%    Third Edition,
%    Cambridge University Press, 1996,
%    ISBN: 0-521-35699-7,
%    LC: QB62.5.D83.
%
%  Input:
%
%    Input, integer Y, the year, which must be 1583 or greater.
%    (The formula is only valid for years after the Gregorian calendar
%    was adopted.)
%
%  Output:
%
%    integer M, D, the month and day of Easter.
%
  if ( y <= 0 )
    m = -1;
    d = -1;
    return
  end

  a = year_to_golden_number ( y );

  a = a - 1;

  b = floor ( y / 100 );
  c = mod ( y, 100 );

  dd = floor ( b / 4 );
  e = mod ( b, 4 );

  f = floor ( ( b + 8 ) / 25 );
  g = floor ( ( b - f + 1 ) / 3 );
  h = mod ( 19 * a + b - dd - g + 15, 30 );

  i = floor ( c / 4 );
  k = mod ( c, 4 );

  l = mod ( 32 + 2 * e + 2 * i - h - k, 7 );
  mm = floor ( ( a + 11 * h + 22 * l ) / 451 );

  m = floor ( ( h + l - 7 * mm + 114 ) / 31 );
  d = mod ( h + l - 7 * mm + 114, 31 ) + 1;

  return
end
