Menu ≡
kalendar.beda.cz

Ostatní algoritmy výpočtu Velikonoční neděle

Vstupem je rok a výsledkem je datum Velikonoční neděle v gregoriánském kalendáři pro zadaný rok. Všechny výpočty se provádí pouze s celými čísly, tedy například 23 děleno 5 je 4 a celočíselný zbytek po dělení (zde označen operátorem '%') je 3. Pozor na výsledek této operace pro záporná čísla. Například programovací jazyk Python správně vrací:

(-23) % 5
2

Ale například PHP a Javascript vrací záporný výsledek, což není dobře. Tomu lze zabránit přičtením konstanty, jež je vhodným celočíselným násobkem dělitele, zbytek po dělení to neovlivní:

(-23) % 5, (-23 + 25) % 5
-3, 2

Též se liší výsledky funkce integer pro záporná čísla. Řešení s přičtením konstanty je v některých zobrazených algoritmech použito.

Gaussův algoritmus z roku 1816

Podrobný rozbor algoritmu.

a = rok % 19
b = rok % 4
c = rok % 7
k = rok / 100
p = (13 + 8 * k) / 25
q = k / 4
M = (15 − p + k − q) % 30
N = (4 + k − q) % 7
d = (19 * a + M) % 30
e = (2 * b + 4 * c + 6 * d + N) % 7
je-li (d + e + 22) menší jak 32, pak je Velikonoční neděle (d + e + 22). března
je-li d rovno 29 a současně e rovno 6, pak je Velikonoční neděle 19. dubna
je-li d rovno 28 a současně e rovno 6 a současně 'a' větší jak 10, pak je Velikonoční neděle 18. dubna
jinak je Velikonoční neděle (d + e − 9). dubna

Vylepšený Gaussův algoritmus z roku 2017

Byl zjednodušen výpočet dne týdne, viz pokus o vylepšení algoritmu. Také byly zjednodušeny a přesunuty podmínky. Navíc bylo odstraněno přebytečné dělení u výpočtu konstant M a N, později se stejně provádí.

a = rok % 19
bc = (rok + rok / 4 ) % 7
k = rok / 100
p = (13 + 8 * k) / 25
q = k / 4
M = 15 − p + k − q
N = 4 + k − q
d = (19 * a + M) % 30
je-li d rovno 28 a současně 'a' je větší jak 10, pak d = d - 1
je-li d rovno 29, pak d = d - 1
e = (35 + N - bc - d) % 7
je-li (d + e + 22) menší jak 32, pak je Velikonoční neděle (d + e + 22). března
jinak je Velikonoční neděle (d + e − 9). dubna

Butcherův algoritmus z roku 1876

a = rok % 19
b = rok / 100
c = rok % 100
d = b / 4
e = b % 4
f = (b + 8) / 25
g = (b − f + 1) / 3
h = (19 * a + b − d − g + 15) % 30
i = c / 4
k = c % 4
L = (32 + 2 * e + 2 * i − h − k) % 7
m = (a + 11 * h + 22 * L) / 451
měsíc = (h + L − 7 * m + 114) / 31
den = (h + L − 7 * m + 114) % 31 + 1

Oudinův algoritmus z roku 1940

c = rok / 100
n = rok % 19
k = (c - 17) / 25
i = (c - c / 4 - (c - k) / 3 + 19 * n + 15) % 30
i = i - (i / 28) * (1 - (i / 28) * (29 / (i + 1)) * ((21 - n) / 11))
j = (rok + rok / 4 + i + 2 - c + (c / 4)) % 7
l = i - j
měsíc = 3 + (l + 40) / 44
den = l + 28 - 31 * (měsíc / 4)

Conwayův algoritmus z roku 1980

John Horton Conway je britský matematik, též tvůrce počítačové simulace Život.

s = rok / 100
t = rok % 100
a = t / 4
p = s % 4
jps = (9 - 2 * p) % 7
jp = (jps + t + a) % 7
g = y % 19
G = g + 1
b = s / 4
r = 8 * (s + 11) / 25
C = -s + b + r
d = (11 * G + C) % 30
d = (d + 30) % 30
h = (551 - 19 * d + G) / 544
e = (50 - d - h) % 7
f = (e + jp) % 7
R = 57 - d - f - h
je-li R menší jak 32, pak je Velikonoční neděle R. března
jinak je Velikonoční neděle (R - 31). dubna

Carterův algoritmus z roku 1996

Podrobný rozbor na stránce Carterův algoritmus výpočtu Velikonoční neděle.

a = rok % 19
k = rok / 100
s = k - k / 4 - 12
m = 8 * (k - 14) / 25
b = 202 + s - m - 11 * a
d = b % 30 + 21
je-li d rovno 49 a současně 'a' větší jak 10, pak d = d - 1
je-li d rovno 50, pak d = d - 1
e = (rok + rok / 4 + d - 10 - s) % 7
q = d + 7 - e
je-li q menší jak 32, pak je Velikonoční neděle q. března
jinak je Velikonoční neděle (q - 31). dubna

Lichtenbergův algoritmus z roku 1997

Zdroj: Dr Heiner Lichtenberg, Zur Interpretation der Gaußschen Osterformel und ihrer Ausnahmeregeln, Historia Mathematica 24 (1997), strana 441 - 444. Proměnná og je (březnové) datum cyklického úplňku.

k = rok / 100
m = 15 + (3*k+3)/4 - (8*k+13)/25
s = 2 - (3*k+3)/4
a = rok % 19
d = (19*a + m) % 30
r = d/29 + (a/11) * (d/28 - d/29)
og = 21 + d - r
sz = 7 - (rok + rok/4 + s) % 7
oe = 7 - (og - sz) % 7
os = og + oe
je-li os menší jak 32, pak je Velikonoční neděle os. března
jinak je Velikonoční neděle (os - 31). dubna

Kershawův algoritmus z roku 2004

Algoritmus byl odvozen z tabulek uveřejněných v modlitební knize anglikánské církve 'Book of Common Prayer', autorem je Simon Kershaw. Tento algoritmus se nezdržuje výpočtem epakty, ale rovnou vypočte vzdálenost ve dnech mezi cyklickým úplňkem a církevním začátkem jara (21. březen). To je rozdíl oproti jiným algoritmům, které většinou pracují s březnovým datem cyklického úplňku. Po výpočtu číselného vyjádření nedělního písmena nakonec zjistí vzdálenost Velikonoční neděle od církevního začátku jara. Zdroj algoritmu je z nenápadné stránky Calculating the Date of Easter. Pro naše potřeby byl algoritmus jen drobně vylepšen: použité konstanty 213 a 39 zamezují vzniku záporného čísla, viz poznámka v úvodu této stránky.

g = rok % 19 + 1
k = rok / 100
s = k - k/4 - 12
m = 8 * (k - 14) / 25
p = (213 - 11*g + s - m) % 30
je-li p rovno 28 a současně g je větší jak 11, pak p = p - 1
je-li p rovno 29, pak p = p - 1
d = (rok + rok/4 - s + 2) % 7
e = p + 1 + (39 - d - p) % 7
je-li e menší jak 11, pak je Velikonoční neděle (e + 21). března
jinak je Velikonoční neděle (e - 10). dubna

Další informace:

Kalendáře Helma - nástěnný, stolní i pracovní kalendář Diáře Helma - diář a zápisník
Válka na Ukrajině: 1002.den
Nahoru