Pentium FDIVバグ:CPUの割り算が間違っていた

CPUという「絶対に正しい」はずの計算機が割り算を間違えた1994年の事件を解剖。SRT除算テーブルの欠損という根本原因と、ユーザー影響を軽視して約4.75億ドルを失ったリスク対応の教訓まで一気に掴める。

応用大惨事ハードウェア浮動小数点検証CPU最終更新: 2026-07-29
3つの要点
TL;DR
  1. 1994年、初代PentiumのFDIV命令が特定の割り算で誤差を返すと判明した。数学者Thomas Nicelyが計算のずれを公表し、CPU設計の欠陥として世界的な事件になった。
  2. SRT除算が参照する商予測表で数個の項目が欠け、特定入力だけ商を誤った。日常計算ではまれでも、反復する科学技術計算では誤差が実害になり得た。
  3. Intelは当初交換に消極的だったが、批判後に無条件交換へ転じ約4億7500万ドルを計上した。網羅検証の難しさと、利用者影響を軽視する説明が信頼を損なう教訓だ。

何が起きたか

横にスクロール

除算表の欠損セルが稀な入力だけを誤らせた事故の前提から被害と防止策までを示す図
一つの欠陥がシステム事故へ拡大した因果と、再発防止を置く層を整理します。

コンピュータのCPUが四則演算を間違える——普通なら考えにくいことが、1994年に現実に起きた。Intelが自信作として市場に投入した初代Pentiumが、ある特定の値の割り算で、正しい答えからわずかにずれた結果を返していたのだ。

きっかけは、素数の研究をしていた数学者Thomas Nicelyだった。双子素数にまつわる計算を続けるうち、彼はどうしても説明のつかない数値のずれに気づく。原因を切り分けていくと、行き着いたのは自分のプログラムでも計算方法でもなく、Pentiumそのものだった。Intelへ問い合わせても当初は明確な回答が得られず、1994年の終わりに彼がこの事実を公表すると、話は一気に広がった。

「割り算を間違えるCPU」という見出しは、当時立ち上がりつつあったインターネットと既存のメディアを通じて世界中を駆けめぐった。誤差そのものは微小で、多くのユーザーが日常的に踏むものではない。それでも、計算機の根幹である算術が信用できないという事実は、技術に詳しくない人々にも強い不安を与えた。当時のPentiumはIntelの旗艦であり、パーソナルコンピュータの高性能機へ広く採用されつつあった。誤りが指摘されたのがまさにその主力製品だったことも、騒動を大きくした一因である。

なぜ「わずかなずれ」が大事件になったのか

表計算や文書作成で誤差を体感することはまずない。しかし、CPUが「常に正しく計算する」という暗黙の前提は、あらゆるソフトウェアが寄りかかっている土台だ。その土台に穴があるとわかった衝撃が、被害の実測値以上に大きかった。

具体的には、次のような割り算で誤差が観測された。フェンス内の値は当時よく引用された例である。

4195835 / 3145727

正しい答え     : 1.333820449136...
欠陥のある結果 : 1.333739068902...

検算 x - (x / y) * y は本来 0 だが、
欠陥のあるPentiumでは 256 が返った

一見わずかな差だが、答えは5桁目あたりから静かに狂っていく。検算のつもりで行った引き算が0にならないことで、多くの技術者がこの欠陥に気づいた。膨大な回数の除算を重ねる用途ほど、小さなずれが積もって結果を蝕んでいく。

技術的な根本原因

問題は、除算を高速に行うためのアルゴリズムに潜んでいた。Pentiumの浮動小数点ユニットは、割り算にSRT法と呼ばれる方式を採用していた。SRT法は、商を一気に求めるのではなく、1回の繰り返しで商の複数ビットずつを確定させていく「桁ごとの繰り返し」型のアルゴリズムだ。これにより、素朴な方式より少ない回数で割り算を終えられる。

その核心にあるのが、次にどの商の桁を選ぶかを決めるルックアップテーブルである。各ステップで、途中の余り(部分剰余)と割る数のおおよその値を手がかりに、テーブルを引いて「次の商の桁」を予測する。この予測が正しければ、割り算は正確かつ高速に進む。SRT法は本来、多少の予測のずれなら次のステップの部分剰余で吸収し、あとから取り戻せる冗長さを備えている。だからこそ高速化が成り立つのだが、その前提はテーブルが正しく埋まっていることにある。

Pentiumの欠陥は、このテーブルの中身にあった。商を予測するためのセルのうち、わずかな数のエントリが値を持たず、空になっていたのだ(欠損したのは5個ほどとされることが多いが、正確な数の扱いには諸説ある)。テーブルを回路へ書き込む工程での取りこぼしが原因だったとされる。欠損セルを踏んだときだけは、SRT法本来の取り戻しが効かず、誤差が最終的な商にそのまま残ってしまう。

回路に焼き込まれた誤り

ソフトウェアのバグなら、修正版を配れば済む。しかしこの欠損はシリコンの回路そのものに刻まれていた。出荷済みのプロセッサを後から書き換える手段はなく、直すには物理的な交換しかない。

普段の割り算では、この空のセルを引き当てることはまずない。だからこそ長期間見逃された。しかし、特定のオペランドの組み合わせがちょうど欠損したセルを指すと、プロセッサは本来あるべき商の桁の代わりに誤った値を読み、その割り算の結果が下位の桁でずれる。日常のアプリケーションでは滅多に顕在化しないが、膨大な計算を積み重ねる科学技術計算では、無視できない実害になり得た。

浮動小数点がそもそもどのように数を表すのかは、IEEE 754の可視化で確かめられる。有限のビットで実数を近似するこの仕組みでは、末尾の桁のわずかな誤りが、後段の計算で思わぬ形に膨らむことがある。だからこそ、割り算という基本演算の正しさは、数値計算全体の信頼を支える前提になっている。

教訓

第一の教訓は、ハードウェアの検証には網羅的な難しさがあるということだ。テーブルの全セルを一つずつ確かめていれば、欠損は出荷前に見つかったはずだった。だが除算の入力の組み合わせは膨大で、通常のテストでは「たまたま欠損セルを踏む入力」に当たる確率は低い。この事件以降、業界は算術回路を数学的に証明する形式検証へ大きく舵を切った。テストで「バグが無いことの証拠」を集めるのではなく、設計が仕様どおりであることを証明するアプローチだ。

第二に、より高くついたのはリスクコミュニケーションの失敗だった。Intelは当初、この欠陥を「実用上ほぼ影響はない」と説明し、交換にも消極的な姿勢を取った。技術的には誤差の頻度が低いという主張に一定の根拠はあった。しかし、ユーザーが求めていたのは確率論ではなく、「自分のCPUは正しく計算するのか」という信頼だった。影響を軽視する説明は火に油を注ぎ、批判は日を追って拡大した。

観点ソフトウェアの欠陥ハードウェアの欠陥
修正の配布更新版を配れば済む物理的な交換が必要
コスト比較的小さいリコール規模で巨額
検証の重み後追いで直せる前提出荷前検証が決定的

最終的にIntelは方針を転換し、希望するユーザーへ無条件で交換に応じることを表明した。この対応にかかった引当は約4億7500万ドルにのぼったとされる。もし最初から誠実に影響を認め、交換に応じていれば、失う信頼も費用も小さく済んだ可能性が高い。

影響の軽視は最も高くつく

「実害は小さい」という技術的評価が正しくても、それを盾に利用者の不安を退ければ、信頼はより速く失われる。欠陥そのものより、欠陥への向き合い方が損失の大きさを決めることがある。

まとめ

Pentium FDIVバグは、たった数個のテーブルの欠損が、数億ドルの損失と「CPUは正しい」という信頼への傷につながった事件だ。技術的な核心はSRT除算のルックアップテーブルの欠損という一点にあり、教訓はハードウェア検証の網羅性と、ユーザー影響を軽視しないリスク対応という二点に集約される。物理に刻まれた誤りは後から直せない——だからこそ、出荷前の検証と、問題が起きたときの誠実な対応が決定的に重要になる。ほかの事例は工学の大惨事から、プログラミングの基礎はプログラミングから辿れる。

工学の大惨事の記事ガイド

Pentium FDIVバグ:CPUの割り算が間違っていたを実務で読む

TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。

解決すること

大惨事

比較で見る軸

難易度: advanced / カテゴリ: 工学の大惨事 / タグ数: 5

導入後に効く点

SRT除算が参照する商予測表で数個の項目が欠け、特定入力だけ商を誤った。日常計算ではまれでも、反復する科学技術計算では誤差が実害になり得た。

先に潰すリスク

用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。

数字・仕様の読み方
難易度
advanced
カテゴリ
工学の大惨事
タグ数
5

判断チェックリスト

  • 自社の用途が「大惨事 / ハードウェア」に近いか確認する。
  • 強みである「1994年、初代PentiumのFDIV命令が特定の割り算で誤差を返すと判明した。数学者Thomas Nicelyが計算のずれを公表し、CPU設計の欠陥として世界的な事件になった。」が本当に評価軸になるか確認する。
  • 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
  • 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
  • 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
  • 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。

次に確認する観点

大惨事ハードウェア浮動小数点検証CPU