Die Mutter des Mathematikers Karl Friedrich Gauß gab das Geburtsdatum ihres Sohnes am 30.4.1777 als "am Mittwoch der Woche vor Himmelfahrt" an. Vielleicht der Grund warum sich Gauß der Berechnung des Ostertermins annahm und im Jahr 1800 eine Formel dafür entwickelte, für die er den Beweis allerdings schuldig blieb. Zusätzlich entwarf er noch eine Formel mit deren Hilfe der erste Tag des Paschafestes berechnet werden kann.
Diese und andere habe ich in die Programmiersprache BASIC umgeschrieben und getestet. Die Formeln wurden von mir so erweitert, dass die Variable "Ostern%" immer die Tage zum Ostersonntag ab dem 1. Januar angibt. Die Zeilen IF (Jahr&... und Ostern% =... gehören also nicht zur eigentlichen Formel! Bei Formeln die nur zwischen 1900 und 2099 gelten habe ich auf die erweiterte gregorianische Schaltung für Feb% verzichtet.
SUB JulianischeOstern(Jahr&, Ostern%)
'Gaußsche Formel für den Julianischen Kalender
IF Jahr& MOD 4 = 0 THEN Feb% = 29 ELSE Feb% = 28
a& = Jahr& MOD 19
b& = Jahr& MOD 4
c& = Jahr& MOD 7
d& = (19 * a& + 15) MOD 30
e& = (2 * b& + 4 * c& + 6 * d& + 6) MOD 7
Ostern% = 31 + Feb% + 21 + d& + e&
END SUB
'Gaußsche Formel für den Gregorianischen Kalender gültig von 1583 bis 2499
SUB Gauss(Jahr&, Ostern%)
IF (Jahr& MOD 4 = 0 AND Jahr& MOD 100 <> 0) OR Jahr& MOD 400 = 0 THEN Feb% = 29 ELSE Feb% = 28
SELECT CASE Jahr&
CASE 1583 TO 1699
M& = 22: N& = 2
CASE 1700 TO 1799
M& = 23: N& = 3
CASE 1800 TO 1899
M& = 23: N& = 4
CASE 1900 TO 2099
M& = 24: N& = 5
CASE 2100 TO 2199
M& = 24: N& = 6
CASE 2200 TO 2299
M& = 25: N& = 0
CASE 2300 TO 2399
M& = 26: N& = 1
CASE 2400 TO 2499
M& = 25: N& = 1
END SELECT
a& = Jahr& MOD 19
b& = Jahr& MOD 4
c& = Jahr& MOD 7
d& = (19 * a& + M&) MOD 30
e& = (2 * b& + 4 * c& + 6 * d& + N&) MOD 7
Ostern% = 31 + Feb% + 21 + d& + e&
IF Ostern% - Feb% = 87 THEN
Ostern% = Ostern% - 7
ELSEIF a& > 10 AND d& = 28 AND Ostern% - Feb% = 86 THEN
Ostern% = Ostern% - 7
END IF
END SUB
'Nach Dr. Heiner Lichtenberg
'Veröffentlicht 1997 in der Zeitschrift "Historia Mathematica 24"
SUB Lichtenberg(Jahr&, Ostern%)
'Für den julianischen Kalender setze man die säkularen Schaltfunktionen konstant, nämlich S = 0 und M = 15.
'In diesem Fall braucht man natürlich auch die Größen K und R nicht.
'Für K gibt's schlicht keine Verwendung mehr und R bleibt konstant Null.
IF (Jahr& MOD 4 = 0 AND Jahr& MOD 100 <> 0) OR Jahr& MOD 400 = 0 THEN Feb% = 29 ELSE Feb% = 28
k& = INT(Jahr& / 100)
m& = 15 + INT((3 * k& + 3) / 4) - INT((8 * k& + 13) / 25)
s& = 2 - INT((3 * k& + 3) / 4)
a& = Jahr& MOD 19
d& = (19 * a& + m&) MOD 30
r& = INT(d& / 29) + (INT(d& / 28) - INT(d& / 29)) * INT(a& / 11)
og& = 21 + d& - r&
sz& = 7 - (Jahr& + INT(Jahr& / 4) + s&) MOD 7
oe& = 7 - (og& - sz&) MOD 7
Ostern% = 31 + Feb% + og& + oe& - 1
END SUB
'Von J. M. Oudin aus dem Jahre 1940
SUB Oudin(Jahr&, Ostern%)
'Étude sur la date de Pâques. in: Bulletin Astronomique, Bd. XII, S. 391-410
'Zuletzt veröffentlicht in "Explanatory Supplement to the Astronomical Almanac" von P. K. Seidelmann (1992)
IF (Jahr& MOD 4 = 0 AND Jahr& MOD 100 <> 0) OR Jahr& MOD 400 = 0 THEN Feb% = 29 ELSE Feb% = 28
c& = INT(Jahr& / 100)
n& = Jahr& - 19 * INT(Jahr& / 19)
k& = INT((c& - 17) / 25)
i& = c& - INT(c& / 4) - INT((c& - k&) / 3) + 19 * n& + 15
i& = i& - 30 * INT(i& / 30)
i& = i& - INT(i& / 28) * (1 - INT(i& / 28) * INT(29 / (i& + 1)) * INT((21& - n&) / 11))
j& = Jahr& + INT(Jahr& / 4) + i& + 2 - c& + INT(c& / 4)
j& = j& - 7 * INT(j& / 7)
l& = i& - j&
m& = 3 + INT((l& + 40) / 44)
d& = l& + 28 - 31 * INT(m& / 4)
Ostern% = 31 + Feb% + d& - 1: IF m& = 4 THEN Ostern% = Ostern% + 31
END SUB
'Aus Jean Meeus "Astronomischer Algorithmen"
SUB Butcher(Jahr&, Ostern%)
'1876 in Butchers "Ecclesiastical Calendar" veröffentlicht.
IF (Jahr& MOD 4 = 0 AND Jahr& MOD 100 <> 0) OR Jahr& MOD 400 = 0 THEN Feb% = 29 ELSE Feb% = 28
a& = Jahr& MOD 19
b& = INT (Jahr& / 100)
c& = Jahr& MOD 100
d& = INT(b& / 4)
e& = b& MOD 4
f& = INT((b& + 8) / 25)
g& = INT((b& - f& + 1) / 3)
h& = (19 * a& + b& - d& - g& + 15) MOD 30
i& = INT(c& / 4)
k& = c& MOD 4
l& = (32 + 2 * e& + 2 * i& - h& - k&) MOD 7
m& = INT((a& + 11 * h& + 22 * l&) / 451)
n& = INT((h& + l& - 7 * m& + 114) / 31)
p& = ((h& + l& - 7 * m& + 114) MOD 31)
Ostern% = 31 + Feb% + p&: IF n& = 4 THEN Ostern% = Ostern% + 31
END SUB
SUB TU_Braunschweig(Jahr&, Ostern%)
'Quelle: Aufgabenblatt 5, Programmieren I, TU Braunschweig, 1991.
'Die Formel stammt von Christopher Clavius und Aloysius Lilius aus dem 16. Jahrhundert.
'Sie gilt für den Gregorianischen Kalender, also ab 1583.
'Zu den Variablen: GZ : Goldene Zahl, JH : Jahrhundert, GK : Gregorianische Korrektur, CK1 : Clavische Korrektur.
'Die Gregorianische Korrektur ist der Versatz des Gregorianischen Kalenders zum Julianischen Kalender.
'Zur Zeit ist GK=13. Die Clavische Korrektur ist die Angleichung an den Mondlauf. Zur Zeit hat sie den Wert CK = 6.
'Im Vergleich zur Gauß-Formel ist die in der Formel unten verwendete Variable CK1 = CK - 5.
IF (Jahr& MOD 4 = 0 AND Jahr& MOD 100 <> 0) OR Jahr& MOD 400 = 0 THEN Feb% = 29 ELSE Feb% = 28
GZ& = Jahr& MOD 19 + 1
JH& = INT (Jahr& / 100) + 1
GK& = INT ((3 * JH&) / 4) - 2
CK1& = INT((JH& - 16 - INT ((JH& - 18) / 25)) / 3)
ExtraTage& = INT ((5 * Jahr&) / 4) - GK&
Epakte& = (11 * GZ& + CK1& - GK&) MOD 30
IF Epakte& <= 0 THEN Epakte& = Epakte& + 30
IF ((Epakte& = 25) AND (GZ& > 11)) OR (Epakte& = 24) THEN Epakte& = Epakte& + 1
Tag& = 44 - Epakte&
IF Tag& < 21 THEN Tag& = Tag& + 30
Tag& = Tag& + 7 - (ExtraTage& + Tag&) MOD 7
Monat& = 3
IF Tag& > 31 THEN Tag& = Tag& - 31: Monat& = 4
Ostern% = 31 + Feb% + Tag& - 1: IF Monat& = 4 THEN Ostern% = Ostern% + 31
END SUB
SUB Clavius(Jahr&, Ostern%)
'Aus "The Art of Computer Programming", Band 1, erstmals veröffentlicht 1962 von Knuth
'Erstellt nach den Quellen von Christopher Clavius
IF (Jahr& MOD 4 = 0 AND Jahr& MOD 100 <> 0) OR Jahr& MOD 400 = 0 THEN Feb% = 29 ELSE Feb% = 28
g& = Jahr& MOD 19 + 1
j& = INT(Jahr& / 100) + 1
x& = INT(j& * 3 / 4) - 12
z& = INT((j& * 8 + 5) / 25) - 5
d& = INT(Jahr& * 5 / 4) - x& - 10
e& = (g& * 11 + 20 + z& - x&) MOD 30
IF (e& = 25 AND g& > 11) OR e& = 24 THEN e& = e& + 1
t& = 44 - e&
IF t& < 21 THEN t& = t& + 30
t& = t& + 7 - (d& + t&) MOD 7
Ostern% = 31 + Feb% + t& - 1
END SUB
'Osterberechnung für die Jahre von 1583 bis 4099
'von Ronald W. Mallen mit den Originalkommentaren
SUB Mallen(Jahr&, Ostern%)
'It's free! Please do not modify code or comments!
IF (Jahr& MOD 4 = 0 AND Jahr& MOD 100 <> 0) OR Jahr& MOD 400 = 0 THEN Feb% = 29 ELSE Feb% = 28
FirstDig& = INT (Jahr& / 100) 'first 2 digits of year
Remain19& = Jahr& MOD 19 'remainder of year / 19
'calculate PFM date
temp& = INT((FirstDig& - 15) / 2 + 202 - 11 * Remain19&)
IF FirstDig& > 26 THEN temp& = temp& - 1
IF FirstDig& > 38 THEN temp& = temp& - 1
IF ((FirstDig& = 21) OR (FirstDig& = 24) OR (FirstDig& = 25) OR (FirstDig& = 33) OR (FirstDig& = 36) OR (FirstDig& = 37)) THEN temp& = temp& - 1
temp& = temp& MOD 30
tA& = temp& + 21
IF temp& = 29 THEN tA& = tA& - 1
IF (temp& = 28 AND Remain19& > 10) THEN tA& = tA& - 1
'find the next Sunday
tB& = (tA& - 19) MOD 7
tC& = (40 - FirstDig&) MOD 4
IF tC& = 3 THEN tC& = tC& + 1
IF tC& > 1 THEN tC& = tC& + 1
temp& = Jahr& MOD 100
tD& = INT (temp& + temp& / 4) MOD 7
tE& = ((20 - tB& - tC& - tD&) MOD 7) + 1
d& = tA& + tE&
'return the date
IF d& > 31 THEN
d& = d& - 31
m& = 4
ELSE
m& = 3
END IF
Ostern% = 31 + Feb% + d& - 1: IF m& = 4 THEN Ostern% = Ostern% + 31
END SUB
SUB Wuensche(Jahr&, Ostern%)
'Von Peter Wünsche für die Jahre von 1900 - 2099
'OT& = Ostertag, OM& = Ostermonat
IF Jahr& MOD 4 = 0 THEN Feb% = 29 ELSE Feb% = 28
a& = Jahr& MOD 19
b& = Jahr& MOD 4
c& = Jahr& MOD 7
d& = (19 * a& + 24) MOD 30
e& = (2 * b& + 4 * c& + 6 * d& + 5) MOD 7
OT& = 22 + d& + e&
OM& = 3
IF OT& > 31 THEN OT& = d& + e& - 9: OM& = 4
IF OT& = 26 AND OM& = 4 THEN OT& = 19
IF OT& = 25 AND OM& = 4 AND d& = 28 AND e& = 6 AND a& > 10 THEN OT& = 18
Ostern% = 31 + Feb% + OT& - 1: IF OM& = 4 THEN Ostern% = Ostern% + 31
END SUB
SUB Herger(Jahr&, Ostern%)
'Die Formel liefert richtige Daten für die Jahre von 1900 - 2099
'Der unbekannte Autor beschränkt die Jahreszahlen jedoch von 1900 - 2078
IF Jahr& MOD 4 = 0 THEN Feb% = 29 ELSE Feb% = 28
IF Jahr& < 1900 OR Jahr& > 2078 THEN EXIT SUB
M& = 24
N& = 5
A& = Jahr& MOD 19
B& = Jahr& MOD 4
C& = Jahr& MOD 7
D& = (19 * A& + M&) MOD 30
E& = ((2 * B&) + (4 * C&) + (6 * D&) + N&) MOD 7
O& = 22 + D& + E&
IF O& > 31 THEN
O& = D& + E& - 9: Monat& = 4
IF O& = 26 THEN
O& = 19
ELSEIF O& = 25 AND D& = 28 AND (Jahr& MOD 19) > 10 THEN
O& = 18
END IF
ELSE
Monat& = 3
END IF
Ostern% = 31 + Feb% + O& - 1: IF Monat& = 4 THEN Ostern% = Ostern% + 31
END SUB
SUB Carter(Jahr&, Ostern%)
'Für die Jahre von 1900 bis 2099
IF Jahr& MOD 4 = 0 THEN Feb% = 29 ELSE Feb% = 28
a& = 225 - 11 * (Jahr& MOD 19)
b& = (a& - 21) MOD 30 + 21
IF b& > 48 THEN b& = b& - 1
c& = INT (Jahr& + (Jahr& / 4) + b& + 1) MOD 7
d& = b& + 7 - c&
Ostern% = 31 + Feb% + d& - 1
END SUB
SUB Beirne(Jahr&, Ostern%)
'Für die Jahre 1900 bis 2099 angeblich von T.O´Beirne
IF Jahr& MOD 4 = 0 THEN Feb% = 29 ELSE Feb% = 28
j& = Jahr& - 1900
a& = j& MOD 19
b& = INT((7 * a& + 1) / 19)
m& = (11 * a& + 4 - b&) MOD 29
q& = INT(j& / 4)
w& = (j& + q& + 31 - m&) MOD 7
t& = 24 - m& - w&
Ostern% = 31 + Feb% + 31 + t&
END SUB
'Die folgende Formel wurde mir von Günther Faust zur Verfügung gestellt.
'Das es sich ohnehin um einen BASIC-Code handelt habe ich auf eine Anpassung verzichtet.
'****************************************************************************
' Funktion zur Ermittlung des Osterdatums mit Hilfe der Gaußschen
' Formel. Das Besondere an der Funktion ist die Berechnung der
' M- und N-Werte, die bei Gauß nur für 1700 bis 2199 tabelliert vorliegen.
' (c) 1983 ... 2004 Günther Faust
'****************************************************************************
FUNCTION Odatum$ (Jahr$)
J = VAL(Jahr$)
p = J \ 100
q = p \ 3
r = p \ 4
M = (15 + p - q - r) MOD 30
N = (p + 4 - r) MOD 7
A = J MOD 19
B = J MOD 4
C = J MOD 7
D = 19 * A + M
D = D MOD 30
E = ((2 * B) + (4 * C) + (6 * D) + N) MOD 7
IF D + E < 10 THEN
otag = D + E + 22
omon = 3
ELSE
otag = D + E - 9
omon = 4
IF otag = 26 THEN otag = 19
IF otag = 25 AND D = 28 AND A > 10 THEN otag = 18
END IF
ot$ = "0" + LTRIM$(STR$(otag))
om$ = "0" + LTRIM$(STR$(omon))
Odatum$ = RIGHT$(ot$, 2) + "." + RIGHT$(om$, 2) + "." + Jahr$
END FUNCTION
Beim jüdischen Kalender wird der Jahresanfang vom Neumond bestimmt. Dieser, als Molad bezeichnete Mond, basiert auf einer Berechnungsweise der ein Mondumlauf von 29,5305941235 Tagen zugrunde liegt.
Im Jahre 1802 schuf Karl Friedrich Gauß eine Formel zur Bestimmung des jüdischen Paschafestes. Er selbst beschrieb die Berechnung wie folgt:
"Der 15. Nisan des jüdischen Jahres A, an welchem die Juden ihr Osterfest feiern, fällt in das Jahr A − 3760 = B der christlichen Zeitrechnung; zur Bestimmung des entsprechenden Monatstages dient folgende rein arithmetische Regel: Man berechne den Wert von 32,0440932 + 1,5542418a + 0,25b − 0,003177794A oder von 20,0955877 + 1,5542418a + 0,25b − 0,003177794B und setze ihn M + m, so dass M die ganze Zahl und m den Dezimalbruch bedeute. Endlich dividiere man M + 3A + 5b + 5 oder M + 3B + 5b + 1 mit 7 und setze den Rest = c. - Nun hat man folgende Fälle zu unterscheiden:
SUB Pascha(Jahr&) 'Erster Paschatag unter Berücksichtigung der gregorianischen Kalenderreform dcomyear = Jahr& dyear = Jahr& + 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) 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 ds = INT(dcomyear / 100) dadd = INT((3 * ds - 5) / 4) IF dcomyear > 1582 THEN dm = dm + dadd Tag% = INT(dm) Monat% = 3 IF Tag% > 153 THEN Monat% = 8: Tag% = Tag% - 153 IF Tag% > 122 THEN Monat% = 7: Tag% = Tag% - 122 IF Tag% > 92 THEN Monat% = 6: Tag% = Tag% - 92 IF Tag% > 61 THEN Monat% = 5: Tag% = Tag% - 61 IF Tag% > 31 THEN Monat% = 4: Tag% = Tag% - 31 PRINT "Erster Paschatag:"; Tag%; Monat%; Jahr& END SUB
| Hauptseite | Verzeichnis |