為了方便算法的表達,小編我選用 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補習社
1太陽年合365.2422日(請參閱 Earth fact sheet) |
1朔望月合 29.53059日(請參閱 Moon fact sheet) |
第二個數字(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