互動計算復活節

Clavius神父的復活節算法
「太陽年與朔望月」的解釋

Donald Knuth的經典 The Art of Computer Programming (1968) 介紹了由 Clavius神父 (16世紀的人)所提出的推算復活節的算法(Algorithm)。小編我沒有讀清楚 Donald 的著作,以為是「數學王子」高斯 Gauss (18世紀的人)的傑作,是小編我讀書不精,被高斯的權威、聲望所蒙蔽,的確是個『美麗的誤會』,謹向多年來的 LaSallians 道歉。今日之前的我還說是TAOCP第一版的錯,今天(二零零六年二月五日)已証實是小編我的錯,謹此向 Donald 道歉。當然,數學王子又怎會放過一展身手的機會呢?高斯有他自己的復活節算法,改良了Clavius神父的算法。殊途是可以同歸的!

為了方便算法的表達,小編我選用 Pascal 撰寫。不懂 Pascal 的讀者不用氣餒, Clavius神父的算法祇要求兩個整數的運算如下:
DIV:整除,即除數運算所得的「商」。
MOD:求餘。任何一個整數X被另一個整數Y除,餘數必定是0..Y-1之間的其中一個數。
舉例:2021 被 100 除,得 20 為商, 21 為餘數。配以賦值符號 :=
A := (2021 DIV 100);變數 A 得 20
B := (2021 MOD 100);變數 B 得 21。

郭志強
二零零六年二月五日
郭Sir補習社


請在以下空格填上任何大於 1582 的整數,按【計算復活節】查閱結果。


    太陽年與朔望月

    天主創造天地的玄妙,不在乎取悅於人,故此:
    1太陽年合365.2422日(請參閱 Earth fact sheet
    1朔望月合 29.53059日(請參閱 Moon fact sheet

    第一個數字(365.2422)帶來了「閏年」的概念。公元前四十六年,儒略凱撒(Julius Caesar)頒佈曆法,「平年 common year」為365日,第四年為「閏年 leap year」,有366日。當年的春分(Spring Equinox)在三月廿五日。
    粗略地計算,365.2422 x 400 = 146096.8。所以,400年祇應有97個閏年。
    到了公元325舉行的尼西大公會議(Nicaea Council)時,已多加了三個閏年,那年的春分已「提前」到三月廿一日。那一次的大公會議,訂定了復活節的慶祝日期:春分(三月廿一日)後的圓月之後的星期日。
    差不多十二個半世紀之後,公元1563年脫利騰大公會議(Council of Trend)時,春分已「提前」到三月十一日了。結果,教宗額我略十三世經過了十九年的努力,完成了修訂的方案,頒佈了新的額我略曆(Gregorian Calendar),作出了大刀闊斧的安排: 他的改革,要到十八世紀纔被
    基督教國家如德國(1700)、英國(1752)所接受。

    第二個數字(29.53059)使根據月亮的曆法(陰曆 Lunar Calendar,如初一、十五之類)和根據太陽的曆法(陽曆 Solar Calendar,如春分秋分、冬至夏至等)很難同步。
    粗略計算: 365.2422 = 12* 29.53059 + 10.875。
    即每年的陽曆一月一日的月亮會遷移十一日。這個就是「閏餘/歲首月齡 Epact」的概念。
    公元前432年,雅典的天文學家 Meton 發現了 19 個太陽年相當於 235 個朔望月的現象,史稱 Metonic Cycle。即是說,祇有 19, 38, 57, 76, 95 歲的西曆生日,纔會和你的唐曆生日吻合!
    19 個太陽年有: 19* 365.2422 / 29.53059 = 234.9970749 朔望月
    從以上點滴的天文曆法小知識,可想而知,釐訂每年的春分(陽曆的概念)之後的圓月(陰曆的概念)確非輕易。額我略的工作是得到一位天文及數學家,耶穌會神父 Christopher Clavius 和一位醫科教授 Aloisius Lilius協助完成的。所以,教會今天用的 Epact,又稱為 Lilian Epact,比尼西亞大公會議時用的 Epact 更精準!
    撰寫這篇網頁,提昇了編寫 Javascript 程式的能力,其中亦走了不少歪路。過程總比成果珍貴。謹此互勉!

    12th April, 2003