Ошибка Pentium FDIV

Поделись знанием:
Перейти к: навигация, поиск

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

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

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

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

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





Воспроизведение ошибки

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

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

Напишите отзыв о статье "Ошибка Pentium FDIV"

Ссылки

  1. [www.trnicely.net/pentbug/pentbug.html "Pentium FDIV flaw FAQ]. Professor Thomas Nicely. [www.webcitation.org/66AzslMxs Архивировано из первоисточника 15 марта 2012].
  2. [support.intel.com/support/processors/pentium/sb/CS-013007.htm FDIV Replacement Program: Description of the Flaw]. Intel (9 июля 2004). Проверено 19 декабря 2006.
  3. Тим Джексон, 2013, с. 10.

Литература

  • Тим Джексон. Inside Intel. История корпорации, совершившей технологическую революцию XX века = Inside Intel. The unauthorized history of the world’s most successful chip company. — М.: Альпина Паблишер, 2013. — 328 с. — ISBN 978-5-9614-1956-6.

Отрывок, характеризующий Ошибка Pentium FDIV

И он, как всегда, бодрыми шагами вошел в гостиную, быстро окинул глазами всех, заметил и перемену платья маленькой княгини, и ленточку Bourienne, и уродливую прическу княжны Марьи, и улыбки Bourienne и Анатоля, и одиночество своей княжны в общем разговоре. «Убралась, как дура! – подумал он, злобно взглянув на дочь. – Стыда нет: а он ее и знать не хочет!»
Он подошел к князю Василью.
– Ну, здравствуй, здравствуй; рад видеть.
– Для мила дружка семь верст не околица, – заговорил князь Василий, как всегда, быстро, самоуверенно и фамильярно. – Вот мой второй, прошу любить и жаловать.
Князь Николай Андреевич оглядел Анатоля. – Молодец, молодец! – сказал он, – ну, поди поцелуй, – и он подставил ему щеку.
Анатоль поцеловал старика и любопытно и совершенно спокойно смотрел на него, ожидая, скоро ли произойдет от него обещанное отцом чудацкое.
Князь Николай Андреевич сел на свое обычное место в угол дивана, подвинул к себе кресло для князя Василья, указал на него и стал расспрашивать о политических делах и новостях. Он слушал как будто со вниманием рассказ князя Василья, но беспрестанно взглядывал на княжну Марью.
– Так уж из Потсдама пишут? – повторил он последние слова князя Василья и вдруг, встав, подошел к дочери.
– Это ты для гостей так убралась, а? – сказал он. – Хороша, очень хороша. Ты при гостях причесана по новому, а я при гостях тебе говорю, что вперед не смей ты переодеваться без моего спроса.
– Это я, mon pиre, [батюшка,] виновата, – краснея, заступилась маленькая княгиня.
– Вам полная воля с, – сказал князь Николай Андреевич, расшаркиваясь перед невесткой, – а ей уродовать себя нечего – и так дурна.
И он опять сел на место, не обращая более внимания на до слез доведенную дочь.
– Напротив, эта прическа очень идет княжне, – сказал князь Василий.
– Ну, батюшка, молодой князь, как его зовут? – сказал князь Николай Андреевич, обращаясь к Анатолию, – поди сюда, поговорим, познакомимся.
«Вот когда начинается потеха», подумал Анатоль и с улыбкой подсел к старому князю.
– Ну, вот что: вы, мой милый, говорят, за границей воспитывались. Не так, как нас с твоим отцом дьячок грамоте учил. Скажите мне, мой милый, вы теперь служите в конной гвардии? – спросил старик, близко и пристально глядя на Анатоля.
– Нет, я перешел в армию, – отвечал Анатоль, едва удерживаясь от смеха.
– А! хорошее дело. Что ж, хотите, мой милый, послужить царю и отечеству? Время военное. Такому молодцу служить надо, служить надо. Что ж, во фронте?
– Нет, князь. Полк наш выступил. А я числюсь. При чем я числюсь, папа? – обратился Анатоль со смехом к отцу.
– Славно служит, славно. При чем я числюсь! Ха ха ха! – засмеялся князь Николай Андреевич.
И Анатоль засмеялся еще громче. Вдруг князь Николай Андреевич нахмурился.
– Ну, ступай, – сказал он Анатолю.
Анатоль с улыбкой подошел опять к дамам.
– Ведь ты их там за границей воспитывал, князь Василий? А? – обратился старый князь к князю Василью.
– Я делал, что мог; и я вам скажу, что тамошнее воспитание гораздо лучше нашего.
– Да, нынче всё другое, всё по новому. Молодец малый! молодец! Ну, пойдем ко мне.