The Gauss Pesach formula maps the first day of Pesach for some Hebrew year "A" onto its equivalent Julian date.
Wolfgang Alexander Shocken includes a full explanation of the formula on pages 51-56 of his classic book "The Calculated Confusion of Calendars". Also included on pages 57-59 is Shocken's explanation of M. Hamburger's proof of the correctness of the Gauss formula.
Below is a QBasic program which accepts as input some civilian year and then outputs the Gregorian date for Pesach in that year.
Feel free to try it.
The calculations do have some limitations due to the 64-bit double precision, floating point arithmetic used. So it is not quite certain as to how far into the future a correct result can be obtained. However, the correctness of the program's results has been confirmed for a range of some 6,000 years.
Another limitation of the program's calculations is that the algorithm converts a civilian year into a Hebrew year by adding the constant 3760. The relationship does not hold after the year 22,202g for Rosh Hashannah. And I believe that the relationship stops holding for Pesach after the year 59,918g (63,677h), when the first day of Pesach is first seen to fall on January 1.
Additional programming steps would then be required to determine the actual Julian year of the date values resulting from the Gauss formula.
The program has also been limited to Gregorian dates which fall during the period from March 1 to August 31. That should theoretically be able to provide results up to the year 31,835g (35,595H). You may, if you would like to, add the program lines which would provide for the rest of the year. However, don't be too surprised if the calculated date exceeds more than one year. It is a theoretical possibility.
The QBasic progam below also includes the Shocken formula for converting a Julian date into a Gregorian date. For any Gregorian year the formula determines the number of days to be added to the Julian date.
Unfortunately, I am not certain as to the range of years over which the Shocken "Julian to Gregorian date" formula will be correct.
Brief Notes on Some of the Other Formulas
Shocken points out that Gauss eliminated the Molad Zakein rule considerations by adding 6 hours (.25 days) to the values to be generated by the formula.
The Molad Zakein rule forces a postponement of Rosh Hashannah to the next permissible day unless there are more than 6 hours of the new moon of Tishrei.
Shocken also shows how the formula da = (12# * dyear + 17#) MOD 19# helps to determine that a Hebrew year "dyear" is either a leap year, the year before, or the year after a leap year.
When da > 11 the Hebrew year is leap. When da < 7 the year can be either 2, 5, 7, 10, 13, 16 or 18 in the 19 year cycle. Otherwise the year can be either 1, 4, 9, 12, or 15 in the 19 year cycle.
The fraction 1367# / 2160# is equivalent to (15h+204p)/24h.
Similarly, the fraction 23269# / 25920# = (21h+589p)/24h.
Variable "dc" will after computation contain the value of the week day.
' ' Calculate the Julian date of Pesach using the Gauss formula ' ' A copy of this formula can be found in ' "The Calculated Confusion of Calendars" by Wolfgang Alexander Shocken ' on page 52 ' ' Karl Friedrich Gauss (1777-1855) ' DEFDBL D ' 'number of parts in an hour = 1080 'number of years in a cycle = 19 ' CLS dyear$ = "5757" 'nominal value in case of no input ' DO WHILE dyear$ <> "" INPUT "Enter the Common Year"; dyear$ dcomyear = VAL(dyear$) dyear = VAL(dyear$) + 3760# ' da = (12# * dyear + 17#) MOD 19# db = dyear MOD 4# dm = 32# + 4343# / 98496# + da + da * (272953# / 492480#) + db / 4# dm = dm - dyear * (313# / 98496#) dmfrac = dm - INT(dm) ' ' determine the postponement ' dc = (3# * dyear + 5# * db + INT(dm) + 5#) MOD 7# IF dc = 2# OR dc = 4# OR dc = 6# THEN dm = dm + 1# IF dc = 1# AND da > 6# AND dmfrac >= 1367# / 2160# THEN dm = dm + 2# IF dc = 0# AND da > 11# AND dmfrac >= 23269# / 25920# THEN dm = dm + 1# ' ' after 1583 add this number of days to the Julian date ' the formula was suggested by W. A. Shocken ' ds = INT(dcomyear / 100#) dadd = INT((3# * ds - 5#) / 4#) IF dcomyear > 1582# THEN dm = dm + dadd ' dm = INT(dm) month$ = "March" IF dm > 153# THEN month$ = "Aug": dm = dm - 153# IF dm > 122# THEN month$ = "Jul": dm = dm - 122# IF dm > 92# THEN month$ = "Jun": dm = dm - 92# IF dm > 61# THEN month$ = "May": dm = dm - 61# IF dm > 31# THEN month$ = "April": dm = dm - 31# PRINT "The first day of Pesach is "; month$; dm; ", "; dyear$ PRINT LOOP 'in case you would like to try another year
First Paged 29 Jun 1997 Next Revised 10 Nov 2002