web担当の人です。
2016年はうるう年です。
2月が29日ある年。
一般的な認識では「4年に1度」なんですが厳密には違うのです。
昔のプログラム入門書に良く出てきた問題なので
IT関係のおっさんはこのうんちくを語りたくなります。
実はうるう年の定義は
・4で割り切れる年はうるう年
・100で割れる年はうるう年にしない
・でも400で割れる年はうるう年にする
なのです。
そもそも正確な1年は365.24219日。
これを365日と数える事で年間0.242日分切り捨ててしまっている。
なので4年に1回だけ、この切り捨てた4つの0.242日を合わせて1日としましょうというのがうるう年。
でも、そうすると
0.242 * 4 で 0.968
0.968日を1日としてカウントするもんだから今度は実際の日数が足りなくなってくる。
4年で0.032日だけ水増ししてしまう事になる。
200年で1.6日、
400年で3.2日ずれてしまう計算に。
これに気づいた頭の良い人が先に述べたルールを追加。
それに基づき計算してみると…
「正確な400年」 が
365.24219 * 400 = 146096.876
「暦で数えてる400年」 + 「うるう年分の下駄」 = 146097
146000 + 97 = 146097
でも、これだと
146097 – 146096.876 = 0.124 で…
400年で0.124日
800年で0.248日
1200年で0.372日
1600年で0.496日
2000年で0.62日
2400年で0.744日
2800年で0.868日
3200年で0.992日
3600年で1.116日
つまり3600年でまた1日余分に数えるという計算に。
ほぼ気にしなくて良いレベルのズレですが、
どうせここまで複雑なルール作ったのならぴったり収まるようにしてよ!
まぁ、生きてる内は関係ない問題ですね。
私も問題を3600年後に先送りできる式を模索してみたいと思います。