🧮 Октябрь 1994 года. Профессор числовых теорий Томас Найсли из Линчберг-колледжа (Вирджиния) исследовал взаимные значения чисел-близнецов простых чисел. Его Pentium должен был безупречно выполнять миллионы операций деления с плавающей точкой. Вместо этого он выдавал неверные результаты.
Найсли проверил: 1 / 824633702441 — результат неверен на трёх разных Pentium-машинах. На старых 486 — верен. Он позвонил в техподдержку Intel. Ему ответили: «Ваша лицензия на математическое обеспечение, вероятно, истекла.»
Да. Техподдержка Intel сказала профессору математики, что его лицензия на математику истекла.
⏱️ Баг жил в компоненте процессора под названием PLA (Programmable Logic Array) — программируемая логическая матрица, которая работает как таблица lookup для операции деления. Вместо того чтобы вычислять деление «в лоб» (дорого, медленно), Pentium использовал предвычисленную таблицу: процессор смотрел в таблицу, получал аппроксимацию, уточнял — и выдавал результат.
Проблема: 16 записей в таблице были пропущены из-за математической ошибки в её определении. Intel в 1994 году утверждал, что скрипт пропустил 5 записей. Но независимый анализ позже показал: пропущено было 16, из которых 5 реально вызывали баг, а 11 — нет.
Intel обнаружил это ещё в мае 1994 года при внутреннем тестировании. Вероятность: один неверный результат на 9 миллиардов вычислений. Компания сочла это «незначительной технической проблемой, которая даже не qualifies как errata» и тихо исправила PLA в следующей ревизии чипа.
🔍 Intel знал. С мая по октябрь 1994 года компания молча выправляла кремний в новых процессорах, не информируя никого из покупателей старых чипов. К октябрю — когда Найсли опубликовал своё открытие — в мире уже работали миллионы «дефектных» Pentium.
Найсли отправил электронное письмо дюжине компьютерных журналов. Один из получателей — Эндрю Шульман, автор книги «Undocumented DOS» — переслал его Ричарду Смиту. Смит опубликовал письмо на форуме Compuserve (прототип соцсетей 1990-х). Репортёр Electronic Engineering Times заметил пост и 7 ноября написал: «Intel исправляет глюк FPU в Pentium».
На этом история могла бы закончиться. Но Intel решил ограничить замену — только те клиенты, которые смогут убедить инженера Intel в необходимости точности. Если вы не могли доказать, что вам нужна точная математика — вам отказывали в замене.
Это была стратегическая ошибка размером с ВВП маленькой страны.
💥 IBM объявил, что приостанавливает продажу всех компьютеров на Pentium. Это был удар — IBM тогда был крупнейшим OEM-производителем в мире. Индекс NASDAQ рухнул. Intel потерял за одну неделю $10 миллиардов рыночной капитализации.
Пользователи Pentium начали называть процессор «Pentagone» — потому что он не мог точно разделить. Джонки Карри написал сатирический FAQ: «Как проверить, есть ли у вас баг? Попробуйте поделить. Если результат неверен — у вас баг. Если результат верен — попробуйте ещё раз.»
Intel сдался. Компания объявила о полной замене любого Pentium по запросу — без доказательств, без уговоров. Стоимость: $475 миллионов. В годовом отчёте за 1994 год Intel признался, что был «поглощён спором».
🔧 Самое интересное — в причинах. Intel в 1994-м сказал: скрипт, генерирующий таблицу lookup, пропустил 5 строк. Но анализ die-photo чипа (проведённый уже в 2024 году, через 30 лет) показал: на самом деле была математическая ошибка в определении самой таблицы. 16 строк были пропущены не скриптом, а математиком, который этот скрипт составлял.
Разница принципиальна: скрипт можно перезапустить. Математику нужно заново проверять. И никто в Intel не проверил — потому что PLA проходила через систему верификации, которая тестировала «подмножество всех возможных входов», а не все.
Pentium FDIV bug — это не история о математике. Это история о том, как маленькая ошибка в одной строке таблицы превращается в $475-миллионный кризис через цепочку организационных решений. Intel мог заменить все чипы в мае — это стоило бы копейки. Вместо этого три месяца скрывал, ограничивал замену, вызвал гнев IBM и потерял $10B капитализации.
Каждое решение на этом пути — скрыть, ограничить, отрицать — было рациональным в коротком горизонте. И каждое усугубляло катастрофу в длинном. Баг был в таблице деления. Но настоящая ошибка — в таблице принятия решений Intel.