それにしても、そのとき私も掲示板上で何か発言したかったのだが結局は果たせなかった。このニュースに接してインテル社の社員(とその家族)以外の者の中には溜飲を下げた人もいることだろう。それ見たことかとインテル社のやり方を一斉に批判した人もいるだろう。しかし私にはこのインテル社の失態についてコメントする気にはどうしてもなれなかったのである。それは問題が余りにもソフトウェア的で、我々が日頃直面している問題に酷似していたからである。偉そうに批判しているお前も、今まで同じようなことをしてきたではないか、と言われそうな気がしたのだ。その結果、どうしてもミスをした設計者の側でものを見てしまい、事態の進展にともなって次第に気が滅入ってくるばかりであった。
先輩Y氏は掲示板上で、こう主張した。哲学者ヤスパースは「一人の人間が同時に、ナチであり、知的であり、誠実であることは不可能である」と言ったけれど、この言葉のアナロジーで「“ナチである”を“今回の件について沈黙を守ったままでいる”と読み替えても、ヤスパースの公理が成り立つ」と。そうまでいわれても、やはり私は発言する気になれなかった(黙っていると、ナチなみに扱われてしまう。やれやれこれは大変な世の中になったものだ)。
ミスを犯した設計者はさぞ辛かろう。検査体制の不備とかを問えば共同責任を負うべき人は多数いるであろうが、突き詰めていけば設計ミスを犯した張本人は必ず一人に特定される。したがって本人は自分の責任だということを痛いほど分かっているはずなのだ。私はどうしてもこの人の立場で物事を考えてしまう(損な性格だ)。これ程の損害を会社に与えた以上、もはや出世は望めない。会社をやめて転職する方がよいであろう。
しかしそのとき会社の幹部はかばってくれた。「些細なミスだ」と言ってかばってくれた。しかも社長自らが! うれしいではないか。これに感激しなければおかしい。しかも世間を向こうにまわして「90億回に1回しか起こらない」と詭弁を弄してまでかばってくれた。部下としてこんなうれしいことはあるまい。部下として仕えるならこういう上司のもとで仕事をしたいものだ。まともな人間なら転職など考えないで、この人のために、この会社のために命懸けで働こうと思うものではないか。
しかし「この人のためならば‥‥」という気持ちを持つのは結構なことではあるが、実はこれは非常に危険なことでもある。プログラマという人種は(例外もあろうが)一般に世間知らずで「おたく」的なところが多い。その結果、上司から命令されたことに無批判に突っ走ってしまう傾向が強いからである。しかも日頃尊敬する上司からの命令なら尚更である。
先にふれた数値の精度に関して、私にはほろ苦い思い出がある。あるお客から、結果の値が“1.0”となるべきところが“0.99999”となってしまうというクレームをもらったときのことである。周知の通りこれは誤差の問題である。コンピュータの内部では2進表現で計算された数値が、人間に理解しやすい10進表現に変換される際に誤差を生ずるのである(2進表現自体にも誤差がある)。これを避けるために出力の際に丸め(四捨五入)が行われる。丸めは10進表現に変換する前に行うのが普通である。つまりこの例では小数点以下5桁まで表示したいのだから6桁目を四捨五入することになるが、それを2進表現のときに行うのである。それには2進の丸め(0捨1入)ではだめで、“0.000005”という定数をあらかじめ加えておいてから10進表現に変換するという方法をとる。ところが、そういう処置をしてもなお誤差が生じてしまう。そして上記のようなクレームが来てしまうのである。
結局のところ“丸め”というのは誤差をカムフラージュするための手段として使われているのだ。どんな数値でも最下位の桁では誤差が含まれている可能性が高い。それがたまたま 1.0 とか 2.0 とかいうきりのよい値のところで目立ってしまうだけのことなのである。したがって、“0.99999”のところだけを苦労して“1.0”となるようにしたところで根本的な解決にはなっていない。しかしお客の改善要求は強く、何とも処置に窮してしまった私は日々悩んでいたものである。
そんなある日、ふと名案を思い付いた。“0.99999”のように“9”がある程度以上連続している数値だけは特別扱いして更に丸めてしまおうと思ったのである。早速アルゴリズムを確定し、実験してみることにした。しかしそのときの実験では“1.0”となるべきところが“8.0”となってしまった。実験は成功したのだが、用意した定数の位取りを2進で3桁分間違えたために、8倍の値になってしまったのである(こういうのを低級なエラーというのだ)。
私はこの“8.0”という出力プリントをつくづくと眺めながら、これは矢張りまずいのではないか。技術者の良心としてやってはならないことではないかと自問した。結局いろいろ考えた末にこのアルゴリズムの導入は思い止まり自から没にしたが、もしこの“低級”なミスを犯さないで最初から“1.0”と印刷されていたとしたら、決行してしまったかもしれない。そして“K法”とでも称する悪いアルゴリズムの典型として後世に名を残していたかもしれない。危ういところであった。これは自分一人で考えてやったことではあるが、もしこれが上司の命令だったらどうか。やはり思い止まっていたであろうか。甚だ心許ない。
これもY氏の受け売りであるが、パルナスの職業倫理<*3>によれば、職業人(プロの技術者)の守るべき倫理綱領の一つに「雇主が技術的に不可能なこと、技術的に間違ったことを強要してきたときは、断固それを拒否しなければならない」というのがあるのだそうである。最近世の中を騒がせているオウム真理教の信者の行動、戦時中に上官の命令に従った兵士の行動などと照らし合わせて考えるとき、我々プログラマも心して行動すべきであろうと思う。
それにしても、このペンティアム騒動のもたらした功罪はいろいろとあろうが、もし功ありとすればそれは一般の人々がコンピュータの仕組み、とりわけソフトウェアの仕組みについて認識を新たにする切っ掛けになったのではないかと思うが、どうであろうか。私にとっては、結局のところ欠陥ペンティアムを手に入れることは適わなかったが。