検索
連載

クイズ!! バグはどこだ? 〜ちょっと休憩して、バグ探しに挑戦〜山浦恒央の“くみこみ”な話(64)(2/2 ページ)

あれは米国ボストンに駐在していたときのこと――。ある日、私が管理していたオフィスの入退室セキュリティシステムが動作しなくなった。その当時、大流行がウワサされていたあるウイルスの存在のせいなのか、あるいは……。

PC用表示 関連情報
Share
Tweet
LINE
Hatena
前のページへ |       

答え:バグはここにあった!

 答えは、

セキュリティシステムの“閏(うるう)年”計算に不良があった

ことが原因です!! ※「」内をクリックしてください。

 1992年は閏年であるにもかかわらず、入退室セキュリティシステムは、2月28日の次は3月1日としていたため、曜日がずれてしまいました。このため、3月6日を金曜日ではなく、土曜日と認識し「休日モード」にしてドアをロックしてしまったのです。同セキュリティシステムにとって、3月6日は、ミケランジェロウイルスの発生日ではなく、2月29日以降の“最初の金曜日”として意味があったのです。

山浦恒央の“くみこみ”な話

 ボストンのオフィスで働く50人以上の「最強プログラマー軍団」が、この原因を解明しようと挑戦したのですが、誰にも分からず、セキュリティシステムの入れ替えが必要かと諦めかけていました。そんな折、真夜中の3時、突如、夢の中で「ひょっとして、閏年の計算ミスではないか?」と思い至り、興奮のあまり、夜中にオフィスまで車を飛ばして、確かめに行きました。分かってみれば簡単な原因ですが、ミスリードする要素が多かったため、極めて不可解な事件でした。

 なお、閏年の計算法は以下の通りです。

  1. 4で割り切れる年は閏年
  2. ただし、100で割り切れる年は平年
  3. 400で割り切れる年は閏年

 閏年が面倒なのは、年の真ん中で余計な1日が増えることにあります。そこで、発想を転換し、1年の始まりを1月1日ではなく、3月1日にすれば、最後の1日が「増える・増えない」という単純な問題になります。

 皆さんは答えが分かりましたか? また次回お会いしましょう!

Copyright © ITmedia, Inc. All Rights Reserved.

前のページへ |       
ページトップに戻る