26.1.4.9 うるう年

条件の複合化の例題として,うるう年の判定をやってみましょう.

ある西暦y年がうるう年であることは,グレゴリオ暦では次の規則で決められています.

こんな訳で,西暦2000年は,めでたくうるう年になることになります.

地球が太陽のまわりを1回まわる時間は,約365.2422日です.うるう年,より正確にはうるう日(leap day)はこの調節をしています. 4年に1日を追加すると,平均が365.25日になります. これに加えて100年に1日へらすと平均は365.24日になります. さらに400年に1日追加すると平均が365.2425日になります. これで,3000年使ってもやっと1日だけ狂うだけの規則となりました.

この規則の要素は順に

  1. y % 4 == 0
  2. y % 100 != 0
  3. y % 400 == 0

と書けます.これを組み合わせてゆきましょう.まず,4の倍数で100の倍数ではない値

(y % 4 == 0) && (y % 100 != 0)

と書けます.100に関する判定は!(y % 100 == 0) としても同じです.

400に関する判定は,上記の判定ではダメだけれどもというぐあいに例外的につけ加えるものなので,またはで追加します.

(y % 4 == 0) && (y % 100 != 0) || (y % 400 == 0)

表し方はこの他にも存在しますが,これが一番わかりやすいでしょう.