連載
» 2014年06月13日 10時00分 公開

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

[山浦恒央 東海大学 大学院 組込み技術研究科 准教授(工学博士),MONOist]
前のページへ 1|2       

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

 答えは、

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

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

 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日が「増える・増えない」という単純な問題になります。

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

「山浦恒央の“くみこみ”な話」バックナンバー
前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.