Halleluia

計算復活節

Clavius的復活節算法

Donald Knuth的經典 The Art of Computer Programming 介紹了由 Clavius 所提出的推算復活節的算法(Algorithm)。我沒有讀清楚 Donald 的著作,以為是「數學王子」高斯 Gauss 的傑作,是我讀書不精,被高斯的權威、聲望所蒙蔽,的確是個美麗的誤會,謹向多年來的 LaSallian 道歉。今日之前我還說是AOCP第一版的錯,今天(二零零六年二月五日)已証實是我的錯,謹此向 Donald 道歉。
為了方便算法的表達,我選用 Pascal 撰寫。不懂 Pascal 的讀者不用氣餒, Clavius 的算法祇要求兩個特別的運算如下:
DIV:整除,即除數運算所得的「商」。      MOD:求餘。例如:
2003 被 100 除,得 20 為商, 3 為餘數。配以賦值符號 := , 整數 A 得 20,整數 B 得 3。
A := (2003 DIV 100);      B := (2003 MOD 100);

郭志強
二零零六年二月五日


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


    太陽年與朔望月

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

    第一個數字(365.2422)帶來了「閏年」的概念。公元前四十六年,儒略凱撒(Julius Caesar)頒佈曆法,「平年」為365日,第四年為「閏年」,有366日。當年的春分(Spring Equinox)在三月廿五日。
    粗略地計算,365.2422 x 400 = 146096.8。所以,400年祇應有97個閏年。
    到了公元325舉行的尼西大公會議(Nicea 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協助完成的。
    撰寫這篇網頁,提昇了編寫 Javascript 程式的能力,其中亦走了不少歪路。過程總比成果珍貴。謹此互勉!

    12th April, 2003

    返回美麗的誤會