(この文は, 1993 年 1 月に数回に分けて PC-VAN サイエンス SIG の 「計算機と算法」ボードに 書いた文章をまとめたものです)
キリスト復活の日付は以下のとおり。(括弧内はヨハネ福音書での日付)
| Nisan | 14(13) THU | 最後の晩餐 |
| 15(14) FRI | 聖金曜日(キリスト没) | |
| 16(15) SAT | 安息日 | |
| 17(16) SUN | キリスト復活 |
暦は当時のユダヤ暦(大陰太陽暦)で, ニサンというのは春分を含む月のことです。 ユダヤ暦では, ニサン月15日の前の夜が過ぎ越しの祭(ヘブライ語 pesah) になります。 ギリシャ語の πασχα, ラテン語の pascha は ヘブライ語の音を写したものです。 フランス語で復活祭を Paques といい, その形容詞形は pascal となりますが, それぞれラテン語の pascha, paschalis に由来します。 過ぎ越しと復活祭の間で混同が起っているわけですね。
さて, ローマでは太陽暦が行われていたので, 初期のキリスト教会では復活祭の日取りの決め方に 混乱があったようですが, ニケーア宗教会議(325AD)で, 「春分(ユリウス暦 3/21)以降(その日を含む)の 最初の満月(大陰暦 15 日)より あと(その日を含まない)の 最初の日曜日」 という風に決められました。 また満月を決めるにあたっては アレキサンドリア方式をとることになりました。
この会議以後も復活祭の日の計算方法が安定しなかったようですが, 6世紀になり, Dionysius Exiguus の計算法が決定版となりました。
彼の方法を, 文献[1]と 説明の仕方は少し違いますが, 下に説明します。
Dionysius Exiguus の計算法は, 暦の上の春分と実際の春分が 10 日ずれて, グレ ゴリオ改暦が必要になるまで使われました。
グレゴリオ暦での復活祭の求め方も 前掲文献[1] に載っているのですが, ちょっと ごちゃごちゃしてるので, 私なりに modify した形で 書きます。
計算法は根本的にはユリウス暦の場合と同じで, それに補正を加える, というもの です。
具体的には, まず翌年の 3/21 を実際の春分にあわせるため, 日付を 10 日とばし, さらに 100 で割り切れて 400 で割り切れない年は平年とする, という処理をしました。 これはもう皆さん御存知なので詳しく書きません。 次に満月は暦の計算が 3日進んでいたので, これも戻し, さらに 2500 年に 8 回遅らせることにしました。 具体的には 1500AD から数えて 300 年ごとに 1 日遅らせ, ただし 2400 年目は遅らせずに 2500 年目を遅らせるということです。
これだけでも相当複雑ですが, さらに2つの補正を加えなければなりません。
第一に, 満月が春分の 29 日後にくる場合, その前日を満月とします。 これは, 復活祭は伝統的(つまりグレゴリオ暦以前)には 3/22..4/25 の 範囲内におさまっていたので, 4/26 に来るのを避ける処置だと思います。
第二に, 19 年周期のうちに, 満月が春分の 28 日後にくる年と 29 日後にくる年 (つまり第一の補正が必要な年)の両方がある場合, 前者も満月を 1 日前にずらし ます。これを第二エパクト補正と呼びます。
以上のアルゴリズムに忠実に JavaScript で書いてみました。 JavaScript の使えるブラウザをお持ちの方は, 上を試して見てください。 いったんローカルにコピーしてから実行した方がいいかも しれません。
JDK 1.1 用 Java サンプル
(ソース)
Java Plug-in 用
JDK 1.0 用 Java サンプル
(ソース)
同上, Java 版です。 Java の使えるブラウザを お持ちの方は, 上を試してください。
NetScape Navigator 4.04 または 4.05 では, DevEdge Onlineの Java Developer Centralから JDK 1.1 Support をダウンロード(サイズ: 約3MB)することによって, JDK 1.1 用アプレットが利用できるようになります。
それ以外の JDK 1.1 非対応ブラウザでも, Java Plug-in (Activator)を使うことによって, JDK 1.1 のアプレットを動かすことのできるものがあります。 Internet Explorer 3.02 以上および NetScape Navigator 3.0 以上では, 上の「Java Plug-in 用」と書いたページを選んでください。 Java Plug-in がなければ自動的にダウンロードページにジャンプするはずです(サイズ: 約8MB)。 詳しくは, Sun の Java Plug-in のページを参照してください。
PC-VAN で Bugmanさんは, 復活祭を 計算する 別のやり方を 紹介してくださいました。 "カントの公式" といい, もとは BASIC のプログラムだそうです。 この公式はグレゴリオ暦にしか対応していませんが, 1583 年から 6553 年まで 私の 方式と 同じ結果を返すことを 確認しています。