【数の構成】モジュロ演算で曜日を判定する

突然ですが、今年、2011年の元旦、1月1日は「土曜日」でした。では、来年2012年の元旦は何曜日でしょうか?

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

ある年の元旦が「土曜日」であれば、通常、次の年の元日は「日曜日」になります。なぜなら1年の365日は、1週間の「mod 7」に対して余り1で、1年の同じ日づけの曜日は、次の年に1つ次にずれるからです。同じ理由から、昨年2010年の元日は1コ前にずれて金曜日、一昨年は木曜日になります。今これを、「合同式」の記法を応用して次のように書くことにします。余りを直接指定しているので、合同記号ではなく、等号です。

曜日の剰余演算

では、ここから考えて、来年のさらに次の年の2013年の元旦は何曜日でしょうか?さらに1日ずれて、月曜日でしょうか?違います。2013年の元日はもう1つだけさらに余分にずれて、火曜日になります。なぜでしょうか。そうです、2012年は「閏年(うるう年)」で、通常年より1日だけ日にちが多いからです。閏年は、4年に1回、西暦が4で割り切れる年(オリンピック・イヤーと同じ)に設定されていて、2月の終わりに、通常年にはない2月29日が追加されています。

曜日の剰余演算

では、この4年に1度の閏年を考慮に入れ、剰余演算の考え方を活用すれば、「ある年のある日付の曜日はなにか」という問題に、計算で自由に答えを出せるようになるでしょうか?短期的には可能ですが、長いスパンではこれでもまだ不足です。というのは、暦には、長い範囲ではさらに調整が入っているからです。

もともと、閏年のような調整日が入っているのは、地球が太陽の周りを回る公転周期と、暦の日付がぴったり合っていないからで、調整日を入れないと、徐々に実際の季節と暦が合わなくなってきてしまいます。4年に1回閏年を入れて調整する暦を「ユリウス暦」といいますが、地球の実際の公転周期は 365.2422日ですので、閏年の設定で、1年あたり、1/4=0.25日付加されて、365.25日となり、かなりいい具合にはなりますが、まだ微妙に合っていません。

もともと西暦ではこのユリウス暦をずっと使っていましたが、そういう次第で、1000年くらい使っている間に、かなりズレが溜まってきて困ったことになってきました。そこで16世紀後半、当時のローマ教皇グレゴリウス13世が、精鋭の学者たちを集めて、さらに正確な調整が入った新しい暦を作るように命じました。こうして生まれたのが「グレゴリオ暦」で、以来、現在まで西暦で使われているのがこのグレゴリオ暦です。日本でも明治維新の時に西暦に切り替えてから、ずっとこれが使われています。

4年に1回の閏年に加え、グレゴリオ暦では、次の調整が入っています。

  • 西暦年が4で割り切れる年であっても、100で割り切れる年には調整日を入れない(閏年にしない)
  • 100で割り切れる年であっても、400で割り切れる年は調整日を入れる

ややこしいですが、これで「365+1/4−1/100+1/400」で、365.2425日と、実際の公転周期にきわめて近い値になります。

このグレゴリオ暦は今の世界で実際に使用されている暦ですので、この調整の考え方を取り入れれば(少なくともグレゴリオ暦が使用されている範囲においては)過去と未来に渡って、ある年のある日付の曜日を自由に割り出せるようになります。

グレゴリオ暦の調整方法を取り込んで、曜日を出力できるようにした有名な公式に「ツェラーの公式」というものがあります。以下のような格好した式です。

ツェラーの公式

なんだか、いかにも難解で、深遠そうな式ですね。なんでこの計算で曜日が出るのか、とても不思議です。剰余演算の応用課題として、次回にこのツェラーの公式の読み解きにチャレンジしてみたいと思います。

仕事でIT関連の分野に携わっている方はよくご存じと思いますが、暦やカレンダーは情報システムを扱う上できわめて基礎的かつ重要な要素で、曜日を正しく計算するというのもその大きな一部です。以前、千年紀をまたいで21世紀が始まるときに「2000年問題」というものがあり、コンピュータが暦を扱うプログラムの不良で、飛行機が落ちたり、銀行預金が消し飛んだり、医療機器が止まったりするのではないかとずいぶん心配され、業界総出で対処にかかりきりになったことがありました。これなどはその端的な例です。




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

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