Ошибка Pentium FDIV — это ошибка в блоке операций с плавающей запятой в оригинальных процессорах Pentium, выпущенных компанией Intel в 1993 году, которая выражалась в том, что при выполнении деления чисел с плавающей запятой с помощью команды процессора FDIV в некоторых случаях результат мог быть некорректным.

История

Данная ошибка была впервые обнаружена и опубликована профессором Линчбургского колледжа Томасом Найсли в октябре 1994 года.

По мнению компании, проблема была вызвана ошибками в справочной таблице, используемой при операции деления, и 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. В случае её выключения компилятор не генерирует дополнительного кода и в некоторых случаях скорость вычислений возрастает.

См. также F0 0F C7 C8

Примечания

Литература

Категория:Арифметика с плавающей запятой Категория:Информационная безопасность Категория:X86 Категория:Ошибки аппаратного обеспечения Категория:Pentium