2008-02-28

閏年

今年は閏年なので、まだ今月は終わりではありません。余った一日で思いっきり自分の好きなことをしましょう。

ところで、閏年の算出方法を覚えていますか? 私は先日人とその話題になったとき、正しく答えられませんでした。4で割り切れて、100で、あれ、400は?みたいな。このあたりの算法は高校生の頃、奥村先生の『C言語による最新アルゴリズム事典』を読んでプログラムを書いたものですが、使わなければあっという間に忘れるのが人間というものです。というわけでWikipediaで改めて調べてみました。

  1. 西暦年が4で割り切れる年は閏年
  2. ただし、西暦年が100で割り切れる年は平年
  3. ただし、西暦年が400で割り切れる年は閏年

平均回帰年は365.24219日(2000年の値)だが、100年間につきおよそ100万分の7日ずつ短くなっている。しかしこれは地球の自転の遅れによって1日の長さが伸びつつあることによる見かけの日数の減少であり、回帰年の長さ自体が減少しているわけではない。

つまり、一年は平均約365.24219日であり、それをグレゴリオ暦では 365 + 1/4 - 1/100 + 1/400 = 365.2425日として近似しているわけです。4年に1度閏年(+1日)にすることで1/4を表し、100年に1度平年(-1日)にすることで-1/100を表し(100は4で割り切れますので、平年にするだけで十分です。2月を27日にしなくても大丈夫)、400年に1度閏年(+1日)にすることで1/400を表します(400は4とも100とも割り切れますので、以下略)。

このような整数だけで有理数を表現する手法はコンピュータプログラミングの中では非常によく用いられる手法です。例えば画面に線分を描画する場合、線分の傾きを有理数で表し、整数演算だけで線分上の点をプロットしていくことが可能です。