TOP > プログラマ2.0日報 > 2008年02月29日

あすなろBlogger

facebookに投稿 このエントリーを含むはてなブックマーク このエントリーを含むはてなブックマーク このエントリーをはてなブックマークに追加 この記事をクリップ! livedoorclip ユーザー数 BuzzurlにブックマークBuzzurlにブックマーク この記事をtweetする

うるう日メモリー

2008.02.29

さてそういえば今日は閏日ですね。例の2000年問題、というのは本質的に汎用機の問題だったわけですけども、パソコンでも、うるう日判定を間違う可能性がないわけではなかった、ということをご記憶でしょうか?

うるう日のルールというと、

  1. 1. 西暦年が 4 で割り切れたら閏年 (+)
  2. 2. 西暦年が 100 で割り切れたら平年 (-)
  3. 3. 西暦年が 400 で割り切れたら閏年 (+)

というものでした。プログラマ的には「より詳細な条件に当てはまるたびにフラグを反転する...」という感じで実装するのがいいかな。勿論、OSライブラリのレベルでのカレンダーは、正しいルールを知っていますけど、「ちょっとした処理」をしたいケースで自分で「うるう判定」しているケースがあると、

  1. 1. え、うるう年って4年に一回でしょ! → 知識不足ですがセーフ!
  2. 2. そういえば世紀の変わり目の年はうるう年じゃないはず...→ 知識が半端でアウト!
  3. 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

カレンダー

<< 2008年02月 >>

          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29  

最新のエントリー

最新のトラックバック

最新のコメント

Tag

バックナンバー