ФЭНДОМ


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

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

Согласно заявлению Intel причиной проблемы послужили неточности в таблице поиска, используемой при проведении операции деления[2].

Как оказалось, в Intel знали об этой проблеме, но молчали. К тому же в Intel считали, что поскольку этот дефект существенен лишь для узкого круга пользователей (математиков и других ученых), то пользователи, которые хотят заменить процессор, должны обратиться в компанию и доказать, что именно им эта замена необходима.

Стремление производителя утаить проблему и реакция на её обнаружение вызвали недовольство потребителей и обширную критику в СМИ, в том числе жесткий репортаж CNN. В результате компания изменила позицию и объявила, что будет свободно обменивать дефектные процессоры всем желающим. Энди Гроув принес публичные извинения. История стоила Intel более половины прибыли за последний квартал 1994 г. — $475 млнШаблон:Sfn.

Воспроизведение ошибки Править

Воспроизвести ошибку можно самостоятельно в приложениях, которые используют математический сопроцессор при работе с числами с плавающей запятой.

4195835.0/3145727.0 = 1.333 820 449 136 241 002 (Правильное значение)

4195835.0/3145727.0 = 1.333 739 068 902 037 589 (Ошибочное значение, возвращаемое процессором, содержащим дефект)

Более наглядный способ воспроизведения:

4195835*3145727/3145727 = 4195835 (При умножении и делении на одно и то же число получаем исходное число)

4195835*3145727/3145727 = 4195579 (Ошибочное значение, возвращаемое процессором, содержащим дефект)

Методы защиты Править

  • В компиляторе Delphi предусмотрена опция Pentium Safe FDIV, заставляющая компилятор вместо использования ассемблерной команды FDIV в коде программы, применять вызов специальной процедуры, которая при первом вызове производит проверку наличия ошибки, и в зависимости от результата при этом и последующих вызовах, либо выполняет простой FDIV, либо производит коррекцию результата.
  • В компиляторе Visual Basic предусмотрена проверка наличия данной ошибки, которая включена по умолчанию. Однако она отключается специальной опцией компилятора — Remove Safe Pentium™ FDIV Checks. В случае её включения, компилятор не генерирует дополнительный код, и в некоторых случаях скорость вычислений возрастает.

Ссылки Править

Литература Править

Обнаружено использование расширения AdBlock.


Викия — это свободный ресурс, который существует и развивается за счёт рекламы. Для блокирующих рекламу пользователей мы предоставляем модифицированную версию сайта.

Викия не будет доступна для последующих модификаций. Если вы желаете продолжать работать со страницей, то, пожалуйста, отключите расширение для блокировки рекламы.

Также на ФЭНДОМЕ

Случайная вики