うるう日メモリー
2008.02.29
さてそういえば今日は閏日ですね。例の2000年問題、というのは本質的に汎用機の問題だったわけですけども、パソコンでも、うるう日判定を間違う可能性がないわけではなかった、ということをご記憶でしょうか?
うるう日のルールというと、
- 1. 西暦年が 4 で割り切れたら閏年 (+)
- 2. 西暦年が 100 で割り切れたら平年 (-)
- 3. 西暦年が 400 で割り切れたら閏年 (+)
というものでした。プログラマ的には「より詳細な条件に当てはまるたびにフラグを反転する...」という感じで実装するのがいいかな。勿論、OSライブラリのレベルでのカレンダーは、正しいルールを知っていますけど、「ちょっとした処理」をしたいケースで自分で「うるう判定」しているケースがあると、
- 1. え、うるう年って4年に一回でしょ! → 知識不足ですがセーフ!
- 2. そういえば世紀の変わり目の年はうるう年じゃないはず...→ 知識が半端でアウト!
- 3. そうでも 400 年に1回はうるう年。→ 正確な知識でセーフ。
....という逆説的な結果に終わったわけで、いちおう騒ぎにはなりましたが、それほど「凄い」ことにはならなかったわけです。勿論問題を起こさなかったプログラムのほとんどは 1. で、3. は少ない....でしょうね(ライブラリを使っているケース以外ですとね。かなり皮肉ですけどね)。
ではクイズ。今年(2008年)は、地球が太陽の周りを1回転する間に、何回自転するでしょうか?? あるいは、「今年」何回自転するでしょうか?
答え:勿論イジワルなひっかけ問題です。「今年」の定義は、ホントは見せかけのトラップに過ぎません。まあ、「今年」の開始と終了をどこで定義するか(閏年の1年を366日とするか、平年と同じで 365.2425日とし、それを切り捨てて 365日とするか)は、どっちで解釈してもいいんじゃないか、とも思います。ホントのトラップはですね、
太陽を1回転する間、その公転の効果によって、1回分余計に自転する必要が出ます。つまり、平年365日の間、言い換えると地球上の人間が「365日」を経験する間、地球は366回自転します。地球の自転の周期は23時間56分しかなくて、この4分の誤差が1年間積もって、1回分の自転になります。
ということです。ちょっと「2000年のうるう年」と話が似てませんか?
投稿者 : 杉浦 こずえ | 投稿日時 : 2008.02.29 08:13





