ウィリアム・カーン博士とHP電卓

ウィリアム・カーン博士といえば、Intel 8087浮動小数コプロセッサの設計に多大な貢献をし、結果的にそれがIEEE754浮動小数点標準に採用されたことで有名な研究者です。

およそあらゆる現代科学の計算はコンピュータで行われており、それらの数値計算はほとんどがIEEE754の定めたデータ形式で行われていることを考えれば、21世紀の文明はカーン博士の仕事の上に成り立っていると言っても過言ではありません。このような業績により、博士は1989年のACMチューリング賞を受章しています。

さて、Youtubeを漁っていたところ、ACMによるカーン博士へのインタビューがアップロードされていることに気が付きました。この動画はインタビューの中から博士がHEWLETT PACKARD(HP)社のコンサルタントをしていた時代の話だけ抜粋したものです。

 

www.youtube.com

要約すると、

  • HPに対して電卓にSOLVE*1キーを実装するよう提案したが、マーケティングからは「そんな機能が欲しいと言ってきたユーザーはいませんよ」と言われた*2
  • しかし、開発のマネージャーが「電卓用に積分機能を開発してくれるなら、SOLVEキーをおいてもいい」と言ってきた*3。抗えない取引だった。
  • 実装はうまくいったが、特定の使い方で正しくない答えが出ることがわかった。
  • HPにこの問題にマニュアルで触れ、正しい使い方をマニュアルに書くよう提案した。
  • ところがこれはHPの『マニュアルにはチュートリアルを書かない』というポリシーに反していた。曰く「我々の顧客はプロです。我々は我々の仕事をわかっているし、顧客は顧客の仕事をわかっています」。
  • 「カーン博士。我々の電卓が間違うとは書けませんよ」とも。
  • そこでマーケティングを言いくるめて、一章をこの問題に割いてもらった。
  • ところが、それがマネージャーに見つかった。彼はその章を削れと言ったが、そうすると製品の発売が遅れる。
  • 結局SOLVEと積分キーを持つHP-34Cはそのままのマニュアルとともに発売された。
  • ところで、HP-34Cはテクニカル・マニュアルの団体から大変な高評価を得た。件の章も高い評価を得た。
  • また、事後の調査によると、「マニュアルのこの章が素晴らしいから買った」と答えていた顧客もいた。彼らは自分の仕事をさらに良くする情報を喜んでいた。
  • 技術用とは別のファイナンシャル・カリキュレーターにはIrr*4ボタンを追加したが、この機能は難しかった。計算誤差が蓄積してでたらめな答えを返す。最終的にこの問題は解決した*5。他社の電卓ではうまく計算できないことがあった。
  • HP-34Cが成功したので、さらに複素数と小さな行列の機能を盛り込みたいと思った。それがかなったのがHP-15C。
  • 当時大学で教えていた。部屋でHP-34Cに自分の数値演算ライブラリを打ち込んでいるときに、訪れた学生から何をしているのか聞かれることがあった。HP-34Cを見せて「こういう機能があるので、こういうことをしている」と説明した。それを聞いた学生の半分くらいはその足で本屋に行ってHPの電卓を注文したと思う。

非常に興味深い話でした。

HP-15Cは私の最初の電卓です。この電卓の行列演算や複素数演算はHP社内の技術者の要望で盛り込まれたものだとばかり思っていました。また、積分やSOLVEはどんな人が使うのだろうかと思っていたものです。よもや、カーン博士が自分の欲しい機能を入れていたとは思いもしませんでした。楽しいエピソードです。

HP-15Cには操作マニュアルの他にAdvance Function Manualが存在し、積分、SOLVE、行列、複素数といった機能を掘り下げて解説しています。インタビューの内容からこのマニュアルが書かれるに至った経緯を想像すると、なかなか楽しいです。

f:id:suikan:20210215131004p:plain

HP-15C

博士のインタビューはこのほかにIEEE浮動小数点標準に関する部分のほか、全編もACMによってアップロードされています。興味深いのですが、4時間の英語インタビューというのは、ちょっと気が重いです。

www.youtube.com

www.youtube.com

ウィリアム・カーン博士の名前は数値計算の話のあちこちに見ることができます。天体の軌道の長期安定性にスポットライトを当てた『ニュートンの時計』にも、起動の数値計算に関する話に名前が出てきます。

 

*1:方程式の根を求める機能

*2:ここでいうユーザーとは電気・電気工学のプロ

*3:マネージャーは積分が苦手だった

*4:内部収益率

*5:HP-12Cに実装されている

/* -----codeの行番号----- */