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

Дана помилка була вперше виявлена і опублікована професором Лінчбурзького коледжу[en] Томасом Найслі в жовтні 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. У разі її включення компілятор не генерує додаткового коду і в деяких випадках швидкість обчислень зростає.

ПосиланняРедагувати

  1. "Pentium FDIV flaw FAQ. Professor Thomas Nicely. Архів оригіналу за 2012-03-15. Процитовано 2018-04-24. 
  2. FDIV Replacement Program: Description of the Flaw. Intel. 2004-07-09. Solution ID CS-013007. Процитовано 2006-12-19. 
  3. Тим Джексон, 2013, с. 10

ЛітератураРедагувати

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