#056 まだまだあるX-Day

1999/04/06

<前目次次>


 2000年1月1日に、西暦の下2桁の桁上がりが起きる結果、コンピュータが誤動作を起こし、それが全世界に渡って影響を及ぼす、というのが世間で言われる「コンピュータの2000年問題」である。しかし実際には、このほかにもコンピュータの日付処理が元で問題が起こりそうな日というのはいろいろあるのである。ここでは私の知る範囲で、それらの「X-Day」を日時順に紹介する。

1999年8月22日

 現在はカーナビなどで一般にもかなり普及したGPS(Glocal Positioning System)、つまり衛星を用いた位置測定システムだが、この一部が、1980年1月6日から起算して1024週(1024=2の10乗)を経過する時、日時がリセットされて異常が起きるかもしれないという指摘。GPSは自らの位置情報も必要とするため、正確な時刻情報はGPSの生命線なのである。1024週なんて20年足らずだから、早晩限界が来るのは明らかなのに、どうしてこんな設計にしたのか、実に不思議なことである。

1999年9月9日

 9が並ぶこの日は、一部のプログラムで「終了」などの特殊なコードとして用いられており、そのようなプログラムが停止するという可能性があるという指摘。確かに9999=終了などという「マジックコード」はプログラマの常套手段であるが、あまり美しいコーディングとは言えない。数は少ないだろうからそれほど深刻ではないと思われるが。

2000年1月1日

 影響が最も深刻だと考えられる「2000年問題」の初日。原因は前回紹介したとおり。返済期限など、未来の予定を扱うものについては、すでに問題が露見しつつある。2000年1月1日当日は、全世界で最も大きな影響が出るだろう。にもかかわらず、同時に全世界で2000年を祝うお祭が予定されていたり、それに合わせての海外ツアーが組まれていたり、2000年最初の子供を作ろうなんていう流行もあるらしい。私としてはとてもじゃないが、この日に飛行機や病院の世話になるなんて大胆なことはできない。何が起きても生きるに困らないように、食料と現金をある程度手元に用意して、おとなしく過ごそうと思っている。

2000年2月29日

 2000年はうるう年である。現在広く用いられているグレゴリオ歴は、西暦年数が「4で割り切れる」「100で割り切れる」「400で割り切れる」という条件を1つもしくは3つ満たせばうるう年となり、2月29日が存在する。ところが、最後の「400で割り切れる」という条件を失念したプログラムは、この日を過ぎると一日のずれが生じるという。要するにプログラマの知識不足から来る単純ミスである。こちらは3月1日以降に時計を合せ直せば済む程度の問題と思われる。

2038年1月19日

 正確にはこの日の12時14分07秒。この中途半端な数字は何かと言うと、UNIXの記述など、現在広く使われているC言語が抱える問題に関係している。C言語で時間を扱う変数型time_tは、1970年1月1日0時からの通算秒数で時刻を取り扱っている。この変数型が32bit符合付き整数値の場合、その最大値(2の31乗-1=2,147,483,647秒)を経過すると、時刻が昔に戻ってしまうという指摘。これについては、time_tを64bit化するなどで対応できると考えられている。ここまで来ると私などはとっくに定年退職して隠居生活をしているだろう。

2080年1月1日

 MS-DOSなど、西暦下2桁表示のOSの一部は、2000年問題を回避するために、下2桁が80〜99の時は1999年代、00〜79の時は2000年代を扱うというように内部で処理している。これはなかなかトリッキーなやり方だが良く使われる対処法で「内部4桁方式」と呼ばれているが、これらのものも所詮100年を経過すれば使えなくなる。しかしここまでさすがにMS-DOSが生き残っているとは思えない。私も生きてはいまい。

番外(論外)

 Windows95/98の場合、起動開始からの時間をミリ秒単位でカウントしている部分があり、その場合32bitの符号付き整数値の最大値である2,147,483,647ミリ秒、すなわち49.7日以上連続稼働するとシステムが停止するというバグがあるらしい。はっきり言ってMS-DOSよりもひどい。これについてはすでに修正プログラムが(Microsoft以外から)出ているが、それにしてもなんでOSが進化しているはずなのに、そういった基本的なところは逆に後退しているのだろうか。このあたりだけ見ても、昨今のMicrosoftの技術力がいかに杜撰なものであるかが窺えよう。こんな調子では、Windowsが2000年問題に完全に対処しているなんてとても考えられないのだが。


<前目次次>