特別な日

 私の現在の仕事はパソコン教室の講師(経営もしているが)だが、受講生達からはコンピュータに関わらず様々な質問を寄せられることがある。以前にも、妙齢の女性に「1999年問題」について質問されたことがあった。この1999年問題、残念ながらコンピュータ業界でのいわゆる「2000年問題」とは何の関係もなかった。
 では、何の話だったのか? なんとそれは、ノストラダムスの大予言というたぐいのものだった。常に科学的非合理性を産業廃棄物として処理してしまいたい(さらにこれをアシモフ主義と呼びたい)私としては、がっくりと気が抜ける質問であったが、これは逆に正しい教育の機会を得た、と勝手に勘違いして対応することにした。
 さて、質問の具体的な内容だが、聡明な読者諸君のご想像通り「1999年に世界は滅亡するのか?」といったものだった。それに対しての私の答えは次の通りだ。
 まず、1999年滅亡説についてだが、なぜ1999年でなければならないのか? 自称「研究者」達の中にはこの年を「世紀末」であるからとしている者がいるが本当にそうだろうか?  よく考えてみよう。まず、1999年が20世紀最後の年だとする。では、21世紀最初の年は明くる年、2000年ということになるだろう。では、さかのぼって20世紀最初の年は何年になるだろうか? 当然1900年になる。では、19世紀は?、18世紀は?、と、どんどんさかのぼっていくとする。すると1世紀、つまり最初の世紀は0年が最初の年になってしまうではないか。西暦0年? なにやら、ほのかなSFの香りがただよう言葉だが、こんな年はもちろん存在しない。1世紀は元年、つまり1年から始まり100年で終わるのである。よって、1999年は20世紀最後の1年前であり、2000年こそが最後の年なのである。野球で言えば9回表、大相撲では14日目、麻雀で言えば北3局である。こんなこともわからない自称研究家達のなんと怪しげなことか。
 前述の女性には、さらに「1000年程前にも似たようなことがトレンドになってましたよ」とも答えた。なんのことかというと、歴史の教科書でもお馴染みの十字軍の遠征である。この十字軍、元を正せば、999年が「世紀末」だという誤解を遠因としている話であり、やはり当時のヨーロッパの人々も世界が滅びると思ったようなのである。もちろん、敬虔なキリスト教徒である彼らは世界終末の日に向けて、どうせ死ぬなら乱痴気パーティーだ、などという発想ではなく聖地エルサレムへの巡礼に旅立つことになる。しかし、当時エルサレムはイスラム教徒達が支配しており、おまけに彼らにとってもエルサレムは聖地のひとつである。もちろん、当時のキリスト教徒達にとって、これはあまり愉快な状況ではなかった。当然の結果として、キリスト教徒達の間に異教徒を排除しようという風潮が生まれ、1095年11月26日、ついに第1回の十字軍が誕生した。一方、イスラム暦という独自の暦を持つ(しかも太陰暦である)イスラム教徒達にとっては、999年は世紀末でもなんでもない平凡な年であり、キリスト教徒達の言い分はちょっと理解できなかっただろう。だが、売られたケンカは買うのがイスラム教徒である。しかも、当時のイスラム世界はヨーロッパよりもはるかに「先進国」であり、意味不明な後進国に負けることなどまず有り得なかった。(註1)
 かくして十字軍遠征は1270年までに8回を数え、しかも同じキリスト教国である、ビザンチン帝国で略奪をはたらき、数々の歴史的遺産が失われる結果となった。このように根拠の乏しい末法思想に走るという愚行は1000年前にも行われており、現在そういった思想に染まっている者は、要するに1000年も「遅れている」のである。
 しかし、コンピュータ業界での「2000年問題」は実在する大問題である。しかもこの問題は実はひとつではない。いくつかの異なった問題点があり、それらを総称したものなのだ。これらの全ての問題点は最終的にコンピュータが日付を正しく扱えなくなるという点につながっている。これから、それらをひとつづつ取り上げていくことにしよう。
 まず、大本命の問題点が、2000年1月1日以降の日付を正しく扱えない、というものである。これはまだ、コンピュータの性能が低かった頃にコンピュータへの負荷を減らすために、日付データのうち年にあたる部分を4桁ではなく2桁で表現したことによる。例えば、1980年という数値の下2桁だけを取り出し80年としたわけだ。この場合、上2桁は必ず「19」である、と決め打ちしていることになる。これで、日付を扱う部分は全て2桁分の記憶を節約できることになり、これが当時のコンピュータの性能ではなかなか無視できないほどの効果があったのだ。もちろん、この方法では2000年になっても下2桁しか扱わないのだから00年となってしまい、上2桁は19固定なので1900年として扱われてしまう。日付が100年前に戻ってしまうわけである。
 実はこの問題、当時のプログラマ達は最初から知っていたことである。この私ですら、はじめてパソコンを手にしてから数日で気が付いたものだ。だが、だれもこんな大問題になるとは思っていなかったのだ。コンピュータの進化は早い、2000年以前にすべて更新されるだろうと皆考えていたのである。しかし、実際のユーザ達は物持ちがよかった。さらにハードウェアを取り替えても、ソフトウェアがそのまま引き継がれたりすると、この問題も一緒に継承されてしまう。こうして、2000年1月1日以降の日付を扱えない多くのシステムが2000年を迎えることになってしまったわけである。
 次に、1999年9月9日問題を取り上げよう。これもやはりソフトウェアの問題なのだが、プログラマ達の間には99や999などの9が並ぶ数値を「例外値」や「特別値」として扱いたがる傾向がある。これは、ある桁数の末尾の数値、3桁なら999、4桁なら9999といった数値に特別な意味を持たせることがよくあるからである。特別な意味、といっても怪しいオカルト風味の話ではない(連続する9に怪しい魅力を感じる者はたくさんいるのだ)。単に9999と入力するとプログラムを停止させるとか、特殊な状態になる等といったようなことなのだ。この機能がプログラムの中で不完全に実装されていると日付の9が並ぶ部分を誤認し、勝手に停止したり思いもよらない動作をしたりするのである。これは、1999年9月9日に限らず、9が並べば引き起こされる可能性がある。
 同様に、連続した0の値を特別に扱うこともあるが、これについては日付との関係に限ってだが、9ほどの危険性はないだろう。当たり前の話だが、連続した0を含む日付はほとんどないからだ。もっとも、2000年はその数少ない日付のひとつではある。
 最後に、2000年閏年問題である。これは、2000年2月29日を閏年として正しく扱えないという問題である。閏年とは4年に一度暦に1日加えて、2月が29日までになるという年のことである。前回は1996年が閏年だったため、次は当然2000年が閏年になると普通は考えるだろう。ところがこれは普通ではないのだ。これには閏年の仕組みを詳しく説明する必要があるだろう。
 なぜ閏年を設けるのかというと、1年の長さが365日ちょうどではないからなのだ。一般に1年とは地球が太陽の周りを1周するための時間ということになり太陽年とも呼ばれる。この太陽年には少しずつ長さの違うものがいくつかあるが、季節に合わせたものは回帰年と呼ばれている。この回帰年が実際には365と約1/4日になる。だが、暦は365日ちょうどであるため1年につき余分な約1/4日分足りなくなっていき、これが4年分たまると約1日分になるため4年ごとに足りない1日加えて調整しているのが閏年なのである。と、ここまでは比較的知られた話である。この暦の仕組みは「ユリウス暦」と呼ばれ、紀元前45年にユリウス・カエサル(ジュリアス・シーザー)によって採用されたものだが、問題はここからだ。このユリウス暦では回帰年を365.25日としているため、400年間に閏年が100回あることになるが、実際の回帰年では400年間に必要な閏年は97回ですむ。これは、平均回帰年が正確には356.2422日であり、ユリウス歴より11分14秒ほど短いためだ。この11分14秒が積もり積もって400年間で約3日分になってしまうのだ。
 1年でたったの11分14秒のように思えるかもしれないが、暦は読者諸君のためだけにあるわけではない(もちろん私のためでもない)。長い歴史の間にはこれが原因で様々な混乱が実際に起きたのだ。このユリウス暦の欠陥を修正するためには、単純に言うと400年の間に閏年を3回キャンセルすればよい。そこで考えられたのが次の方法だ。
 まず、閏年は4で割り切れる年になっている。次に100で割り切れる年は本来閏年になるところをキャンセルしてしまう(100で割り切れる年は4でも割り切れる)。だが、100で割り切れる年は400年間に4回あるので、今度は1日足りなくなってしまう。そこで、さらに400で割り切れる年は閏年をキャンセルしないことにするわけである。これによって、400年間の閏年は97回になり、極めて正確な暦ができあがる。この暦は1582年にローマ法王グレゴリウス13世によって導入され「グレゴリウス暦」と呼ばれる(註2)。現在、我々が用いているのはこのグレゴリウス暦である(実はこの暦でも3000年間で1日ほど進んでしまうが、少なくとも私は気にしない)。
 この閏年がどうしてコンピュータの問題になるのかというと、この閏年のとり方を中途半端に理解しているプログラマ達がいるからである。中途半端な理解とは、100で割り切れる年は閏年ではなく普通の年にするところまでは知っているが、400で割り切れる年が「閏年になってしまう」ことを知らないということである。このために、そういったプログラマ達の書いたプログラムは2000年を「普通の年」にしてしまうのだ。よって、暦の上では2000年2月29日が、コンピュータ上では2000年3月1日になってしまい、それ以降の日付が1日ずれてしまうために様々な不具合が発生する可能性がある。
 世間では無視できぬほどの多数の人々が、2000年問題というとなにやら理解不能な災害のように感じ、こともあろうにノストラダムスの世迷い言(のように私には聞こえる)との関連を訴える者まで出る始末である。また、評論家達の中には2000年1月1日に全てのコンピュータがトラブルに見舞われるようなことを吹聴する者もいる。なぜこうも世の中には破滅好きが多いのだろうか。確かに2000年問題(及びその他の日付関連問題)は存在する。だが、問題点は明らかであり対処は進行中である。必要なのは備えであり、破滅騒ぎではない。
 そもそも、2000年2月29日は400年に一度しか訪れない「特別な日」である。世紀末の1年前に根拠薄弱な破滅騒ぎに明け暮れるよりも、この特別な日を何かしら心に残るような素敵な人生の1ページにすることを考えた方がはるかに実り多い、と私は提言したいのである。

(註1)十字軍遠征の理由は他にも、ローマ・カトリック教会とギリシャ正教会の確執、セルジューク=トルコ人のパレスチナ支配等、いくつかの原因がある。
(註2)グレゴリウス歴が発布された1582年2月24日時点で、暦と実際の季節のずれは11日あった。そのため発布について10月4日(木曜)の翌日を10月15日(金曜)とすることが決められたが、これもまた混乱を招いた。