【数の構成】「ツェラーの公式」を読み解くU

剰余演算の考え方を使って日付データから「曜日」を出力する「ツェラーの公式 (Zeller's congruence)」の解読の続きです。

この節を最初から読む
この節の目次にもどる

ツェラーの公式


「年」の分析

次にいよいよ、グレゴリオ・カレンダーの調整の要(かなめ)である「西暦年」についてみてみましょう。「年」は4ケタの値を上2ケタと下2ケタに分けて設定してあります。

まず、下2ケタの「K」の方ですが、これには「1」と「1/4=0.25」という係数が掛けてあります。これは、下2ケタで年が1年進むと、通常年で「365 mod 7=1」で剰余1であることから曜日も1つカウントアップし、4年に一度の閏年では、「0.25×4=1」でさらにもう1コマ進んで計2コマずれる、という仕組みをあてはめたものと理解できます。ほかの項を固定してここだけデータをスライドしてみましょう。

ツェラーの公式の検証


はじめに見たとおり、通常年では1コマずつ曜日がズレて、閏年の翌年ではさらにもう一日追加で移っているのがわかります。また、閏年の調整日追加の影響を正しく反映させるために、2月以前は前年とみる、という約束がうまく効いているのも確認できますね。この、日や年の項の歯車の歯が1つ進んだときに剰余=曜日の歯車をいくつ進めるか、という設定を、項に掛けてある係数で表現してある、という考え方がツェラー公式の「キモ」ですので、ここをおさえておくとよいと思います。

では、次に同じ年の上2ケタ「J」についてみましょう。上2ケタですから、100年単位の動きを追跡する部分になります。まず、「1/4」の係数については、400年に1度の閏年の調整であることが推測できます。もうひとつの「−2J」とはいったいなんでしょうか?これは Wikipediaの英語版 の方にわかりやすい解説がでていました。

Using similar logic, the progression of the day of the week for each century may be calculated by observing that there are 36524 days in a normal century and 36525 days in each century divisible by 400. Since [ 36525 (mod 7) = 6 ] and [ 36524 (mod 7)=5 ] , the term: [ J/4-2J ] accounts for this (again using integer division and discarding any fractional remainder). To avoid negative numbers, this term can be replaced with [ J/4+5J ] : with equivalent results.

(要訳)
100年あたりの曜日の進みも同様の考え方で計算できる。通常の100年=1世紀は合計36524日であり、400で割り切れる世紀は36525日で、それぞれの mod 7 の剰余が5と6であることから [ J/4-2J ] という項はそれを表現したものである(ここでも小数点以下は切り捨てて整数値をとっている)。マイナスの値を避けたいときは [ J/4+5J ] が代わりに用いられるが、結果は同じである。

なるほど。400年め以外の通常の100年は、100年めだけ閏年を飛ばしてあるので、総日数は「365×100+25−1」で「36524日」になり、これは剰余「5」です。さらに、mod 7 の剰余「5」は「−2」と合同で同じですので(たとえば「Sun → Fri」は+5進めても−2戻してもそうなる)、それで「−2」という係数が「J」に掛かっているわけです。同じように他を固定して、100年づつ飛ばしながら値を動かしてみましょう。

ツェラーの公式の検証

上の例では、400年紀をまたいでいるのは「2012年」ですが、この段だけ「J/4」のフロア関数が「+1」カウントアップして「−2」を1コマだけ巻き戻している(「−1≡6」になっている)ことがみてとれます。

ツェラー公式の分析、さらに続きます。


posted by oto-suu 11/10/29 | TrackBack(0) | 数の構成 | このブログの読者になる | 更新情報をチェックする
<< 前のページ | TOP | 次のページ >>
この記事へのトラックバックURL
http://blog.seesaa.jp/tb/216454926
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック