« 角松敏生 | トップページ | 署名するファンタジスタたち »

2008年2月29日 (金)

閏年とコンピューターシステム

知人の佐藤さんは今年55歳を迎えるが、奥さんはまだ12歳だ。
なぜかというと、奥さんは2月29日に生まれたからだ。

というのはネタであって、日本の法律は誕生日の1日前に歳をとることになっているので、実際には奥さんは50歳だ。

祝日や8月に生まれた子供が「学校が休みだからプレゼントがもらえない」と嘆くのをよく聞くが、うるう日生まれの場合、家族からも祝ってもらえなかったかも知れない。
きっと、幼少の頃、自分だけ誕生日が来ないことで寂しく過ごしただろう。

 

歳は取れども、4年に一度しかやってこない誕生日。
他の365日に生まれた人よりも、この日への感慨は深いだろう。

 

しらべるが調べたうるう年の定義は、
例外を除き、4で割り切れる年。

【 うるう年としない例外 】

■100で割り切れる年
(1900年、2100年など)
   ↓
ただし、100で割り切れる年のうち、400でも割り切れる年は「うるう年」とする。
(2000年、2400年など)

2000年は「うるう年」の定義が決まった後、初めての「100で割り切れる年のうち、400でも割り切れる年」であった。
この法則に対応していないコンピューター・システムが起こすであろう障害を「うるう年問題」と呼んだ。

コンピューター・システムを作る場合、
「2008年はうるう年,2009年はうるう年ではない」というように、1つ1つコンピューターに記憶させることはない。
うるう年の法則性を検討して数式をプログラムに入れておき、うるう年になると「今年は2月が29日まであるぞ」と、コンピューターが認識するのである。

では、なぜ2000年のうるう年は「問題」だったのか?

一般にうるう年判定プログラムの定義には、
「4で割り切れるが、100で割り切れる場合はうるう年ではない」
という式を入れる。
ところが、2000年は上記の式だけでいくと、「うるう歳ではない」ことになり、コンピューターは2月29日を、”3月1日”だと誤認する。
以後の日付は、1日ずつ繰り上がってしまう。

日付に基づいて、たくさんの処理をこなしているコンピューター・システムでは、これは死活問題。
そこで、もう一つ、「400で割り切れる年はうるう年である」という条件をつけておくと、1600年、2000年、2400年・・が、きちんとうるう年と認識される。

この「400年で・・」、の条件が入っていないプログラムで動いているコンピューター・システムでは問題が発生することが、一般に「うるう年問題」と呼ばれていた。

西暦を 98年 99年 というように二桁で持っていたシステムが 2000年になった時に、時系列判断ができなくなるということもあった。

2000年を迎えた時、当時生きていた人の大半は、1900年には生まれていなかった。
うるう年は4年に1回。オリンピックの年。と信じて育って来た人ばかり。
暦の調整のために例外があるということを知って驚いた。

1600年にはまだコンピューターが生まれていなかった。
2000年がコンピューターにとっても「例外的うるう年」の初体験。

世の中は大いに慌て、賑やかだったが結果的に何事もなく
「人類は事前に想像できることには強い」ということが立証されたのであった。

うるう年ブログもくじ

| |

« 角松敏生 | トップページ | 署名するファンタジスタたち »

くらし」カテゴリの記事