数学の歴史上「0の発見」は大きなトピックだった。その0で割るということほど哲学的な計算はないのだが、コンピューターにとっても典型的なバグのもとなのだ。(今回は「週刊アスキー連載中の『神は雲の中にあられる』より転載です)
バグなのか? 私は擁護したいのだが
“ゼロ除算”の話を書こうと思ったのは、今年4月に、ネット上で電動機械式計算機が“0”で割り算したために止まらなくなった動画が流れまくったからだ。ギズモード・ジャパンの「禁断の演算《0で割る》を古いコンピューターにさせたところパニック状態に」という記事でご覧になった人も多いと思う。
しかし、これ“パニック状態”でもなんでもないのである。電動機械式計算機というのは、こんな調子でいつも動いているものなのだ。
さらにいえば、この記事で「やっぱり古い機械式計算機ってとんでもないんだな!」という印象を受けた人が多いと思うけど、このウェーデン製の“FACIT ESA-01”という機械式計算機って割り算できるだけでも凄い。
なぜそんなふうに言うかというと、コンピューターに搭載されているCPUで割り算できないというのはめずらしくないのである。iPhoneをはじめスマートフォンなどに搭載されて、いまや世界で最も使われていると思えるのがARM系のCPUだ。ところが、そのARM自体には数年前にようやく対応したコアが追加されるまで割り算の命令がなかった。
みんながよく知っているインテルの86系やIBMの大型機に、除算命令があるので当たり前と思っている人も多いのだと思う。割り算命令が省略される理由は、滅多に使わない割にはチップ上の演算回路の面積をとってしまうからだそうだ。
それでは、そんなときにスマートフォンの中で割り算はどのように行われているのかというと、この古い機械式計算機と同じようなものでバタバタと処理を繰り返して求めている! ということで、古い機械式計算機をバカにしてはいけないよ、という気分になってしまったのだ。
ちなみに、米国GIZMODOのタイトルは、「古い機械式計算機がなぜ0除算が間違っているか教えてくれる」というそのままのタイトルになっている。
ひょっとしたら、あまりに身の回りのものが電子化されたために、機械がけたたましく動き続けるという感覚が、いまの日本人には馴染みの薄いものになっているのかもしれない。機械があのくらいのペースで動くというのは、明治時代の自動織機からめずらしいお話ではなかった。
それで、この記事のネタ元としてリンクされているのが「ポピュラーメカニクス」(どちらかというと騒ぎ立てたのはこいつ)だが、よく見ると動画自体は7年も前にユーチューブにアップロードされたものである。「修理後の動作チェック」と題してアップロードされたもので、修理がうまくいかずにこのような結果になってあきれてアップロードされた動画の可能性もある。
なぜそう思えるのかというと、私はドイツ製の“ブルンスビガ 11”という電動機械式計算機を持っているのだが、これがときどき計算ミスをしでかすのだ。
“FACIT ESA-01”がフルオートマチックであるのに対して、私のE11はセミオートマチックなので雰囲気は違うのだが、歯車が滑って本来よりも回り過ぎてしまうことがある(ちなみにブルンスビガ 11では0で割り算しようとするとキーそのものを押せなくなっていました)。
FACITといえば、世界最初の機械式計算機である“オドナー”(Odhner)の流れをくむ由緒正しき計算機メーカー。そのことも、ここで触れないわけにはいかないのだが、動画のESAシリーズは1940年代に登場しているので、機械式計算機全盛期の最先端製品といってもよいだろう。
同社の計算機は世界中の40カ国に輸出されていたそうな(私もFACIT製品を1台だけ持っているのだが、それは、シャープがOEMしていたニキシー管電卓である)。そんな、トップクラスのメーカーが“ゼロ除算”に対応していないなんてありうるのだろうか?
ゼロ除算といえば数学の世界の“禁じ手”のようなものでやってはいけないことになっている。よく計算式を使ったパズルで、最後にありえない答えが導かれるものは(正しく途中の計算をしたつもりが“1=2”が証明されるなど)、変数でうまく隠しながら途中にゼロ除算をさせているケースがよくある。
一方、コンピューターの世界でも、“ゼロ除算”は初心者がやらかすエラーの典型的なものだ。ウィキペディアにも“ゼロ除算”という項目が立てられていて「コンピュータなど計算機においても、ゼロ除算に対するふるまいは様々である。たとえば浮動小数点数の扱いに関する標準であるIEEE 754では、数とは異なる無限大を表現するものが結果となる。他には、例外が起きてプログラムの中断を引き起こすかもしれないし、例えばナイーブに取尽し法を実行しようとしたなら無限ループに陥るか、なんらかの最大値のようなものが結果となるかもしれない」とある。
さりげなくコンピューターでも“無限ループに陥る”と書かれているではないか!
ところで、このゼロ除算、英語では“Division by zero”と表記して、米国人はこれ本当に好きなようだ。ちょっと検索すればわかるけど、これをネタにした動画もいっぱいあって、必ず地球が滅亡することになっている。しかも、0で割る元の数は“42”がお決まり。これはもちろん、『銀河ヒッチハイク・ガイド』の「生命、宇宙、そして万物についての究極の疑問の答え」と説明するのも野暮ですが。
ということで、私も、42を0で割ってみることにした。取り出したのは、引き出しに入っていたカシオミニの“CM-606”。42を0で割ると、画面に0が6個並んでエラーメッセージかと思ったら、カシオミニ独特の“小数点以下を見るキー”を押すと、“420000”から延々と1ずつ数えあげているのでありました。電卓の初期に売れまくって担当者がたぶん忙しすぎたんだと思いますけど、やっぱりゼロ除算ってコワイ。

この連載の記事
-
第185回
プログラミング+
DeepSeekショックと中国ITの歴史が教えるAIの未来 -
第184回
プログラミング+
ビヨンドAIの知的生産のキーワードは「YAML」と「エディタ」か? -
第183回
プログラミング+
10年前のAIによる画像変換と2025年の画像生成を同じ元画像で比較する -
第182回
プログラミング+
「めちゃめちゃ文章を書くのが楽になった」―― AIと共に書く時代 -
第181回
プログラミング+
「なるへそ」とは何か? 「なるへそ」の源流をさぐる -
第180回
プログラミング+
1996年には英王室のホームページ開設は"エイプリルフール"ネタだったが……本当に開設されたのは? -
第179回
トピックス
愛すべきマシンたち:ホームコンピューターの美学 -
第178回
トピックス
いまどきの作家は、どんなコンピュータとソフトウェアで小説を書いているのか? -
第177回
トピックス
いま文章を書くのに「CURSOR」を使わないのは損だ -
第176回
トピックス
ドローンはSTEMというより学校の理科・社会、地域コミュニティで活用すべき -
第175回
トピックス
話題の『#100日チャレンジ 毎日連続100本アプリを作ったら人生が変わった』著者・大塚あみさんインタビュー - この連載の一覧へ