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

前回、剰余演算の考え方を応用して、グレゴリオ暦の日付を入れると「曜日」を出力する不思議な「ツェラーの公式 (Zeller's congruence)」を紹介しました。どんな仕組みになっているのでしょうか?

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

最初は式の見方からです。ツェラーの公式を扱うときには、ちょっと変わった約束ごとがいくつかあります。

ツェラーの公式

まず、それぞれの変数の意味は上のとおりです。このとき面白いのは、月を3月の前で切って、3月から始めて2月で終わるという考え方にするところです。1月と2月は前年の13月、14月と数えて、「3月から14月まで」とします。たとえば2011年の1月であれば、2010年13月というデータを入れるのです。

これは、閏年の調整日が12月の末日ではなく、2月の終わりに入っているところから来たものです。前回、閏年の2012年の影響は、当年の2012年ではなく翌年の2013年に現れているところをみました。これをもっと細かくみれば、当年の3月以降からズレていることになりますので、3月からはじめて2月で終わる、という考え方にした方が勝手がよいわけです。

もともと「閏日」はなんで12月の最後ではなく2月なんてへんなところに入っているのかというと、ヨーロッパで年度の切り換えを3月に始める慣習があったからなのだそうで、月の読み替えはそれと合わせていることになります。

また、式の中に「カギかっこ」が入っていますが、よくみると、ただのカギではなくて、天井の上側が開いています。これは床関数(floor function)と呼ばれるものですが、ここでは単純に「切り捨てで整数化」する機能と置き換えてかまいません。

約束ごとは以上です。さっそく適当にデータを入れて結果をみてみましょう。

ツェラーの公式の検証

ツェラーの公式の内容を関数で組んで、西暦年を適当にとった元日について右側で「mod 7」の余りを取ってあります。1月を前年の13月と読み替えるのも要求どおりです。計算結果が左側に表示した実際の曜日とみごとに一致しているのがわかります。オレンジに塗ってある年は閏年で、前年から当年までは剰余(曜日)が1コマ進んでいるが翌年は2コマ進んでいること、2100年については、グレゴリオ暦の仕様どおりに、閏年がパスされて、通常の1コマ進みになっていることも確認できます。まるで数式の歯車でできた精巧な機械時計のようです。


「日」の分析

では計算式の中の要素をひとつづつ切り出してみていきましょう。最初にとりあえず、ほかの項の値を全部固定して「日」「q」の箇所)の値だけを動かしてみることにします。こうすると、modで割る合計値は、日を進めたのに連動して1コマずつ進み、法の0〜7の間の剰余を回転しながら遷移することは容易に理解できます。カレンダーの原理そのままです。

ツェラーの公式の検証

またここから、ツェラーの公式において、たとえば「なぜ土曜日は0で月曜日は2なのか」という疑問にはあまり意味がないことも分かります。式の設定が正しく、剰余がグレゴリオ・カレンダーの仕様どおりに正しく遷移するのであれば、そのどこかを実際の暦の曜日に引っ掛けておけば、あとは全部連動して動くからです。

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


<参考にさせていただいた資料>
  閏日 (Wikipedia)


posted by oto-suu 11/10/22 | TrackBack(0) | 数の構成 | このブログの読者になる | 更新情報をチェックする
<< 前のページ | TOP | 次のページ >>

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