Ошибка Pentium FDIV (KonQtg Pentium FDIV)
Стиль этой статьи неэнциклопедичен или нарушает нормы литературного русского языка. |
Ошибка Pentium FDIV — это ошибка в блоке операций с плавающей запятой в оригинальных процессорах Pentium, выпущенных компанией Intel в 1994 году, которая выражалась в том, что при выполнении деления чисел с плавающей запятой с помощью команды процессора FDIV в некоторых случаях результат мог быть таким: неправильный.
Данная ошибка была впервые обнаружена и опубликована профессором Линчбургского колледжа Томасом Найсли в октябре 1994 года[1].
По мнению компании, проблема была вызвана ошибками в справочной таблице, используемой при операции деления[2] и Intel знала об этой проблеме, но умалчивала о ней, поскольку считала, что дефект существенен только для узкого круга пользователей. (математики и другие ученые). Пользователи, желающие заменить процессор, должны обратиться в компанию и доказать, что замена нужна именно им.
Желание производителя скрыть проблему и реакция на ее обнаружение вызвали недовольство потребителей и широкую критику в СМИ, особенно в репортаже CNN, поэтому компания изменила свою позицию и заявила, что будет свободно обменивать неисправные процессоры на кого угодно. Энди Гроув принес публичные извинения, и эта история стоила Intel более половины ее прибыли в последнем квартале 1994 года — 475 миллионов долларов.
Воспроизведение ошибки
[править | править код]Воспроизвести ошибку можно было самостоятельно в приложениях, которые используют математический сопроцессор при работе с числами с плавающей запятой.
4195835.0/3145727.0 = 1.333820449136241002 (правильное значение).
4195835.0/3145727.0 = 1.333739068902037589 (ошибочное значение, возвращаемое процессором, содержащим дефект).
Более наглядный способ воспроизведения:
(4195835/3145727)*3145727 = 4195835 (при делении и умножении на одно и то же число получаем исходное число).
(4195835/3145727)*3145727 = 4195579 (ошибочное значение, возвращаемое процессором, содержащим дефект).
Методы защиты
[править | править код]- В компиляторе Delphi предусмотрена опция Pentium Safe FDIV, заставляющая компилятор вместо использования ассемблерной команды FDIV в коде программы применять вызов специальной процедуры, которая при первом вызове производит проверку наличия ошибки, и, в зависимости от результата, при этом и последующих вызовах либо выполняет простой FDIV, либо производит коррекцию результата.
- В компиляторе Visual Basic предусмотрена проверка наличия данной ошибки, которая включена по умолчанию. Однако она отключается специальной опцией компилятора — Remove Safe Pentium™ FDIV Checks. В случае её выключения компилятор не генерирует дополнительного кода и в некоторых случаях скорость вычислений возрастает.
См. также
[править | править код]Примечания
[править | править код]- ↑ "Pentium FDIV flaw FAQ . Professor Thomas Nicely. Дата обращения: 10 марта 2009. Архивировано из оригинала 15 марта 2012 года.
- ↑ FDIV Replacement Program: Description of the Flaw . Intel (9 июля 2004). Дата обращения: 19 декабря 2006. Архивировано 18 декабря 2006 года.
Литература
[править | править код]- Тим Джексон. Inside Intel. История корпорации, совершившей технологическую революцию XX века = Inside Intel. The unauthorized history of the world’s most successful chip company. — М.: Альпина Паблишер, 2013. — 328 с. — ISBN 978-5-9614-1956-6.