Помилка 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 flaw FAQ. Professor Thomas Nicely. Архів оригіналу за 15 березня 2012. Процитовано 24 квітня 2018.
- FDIV Replacement Program: Description of the Flaw. Intel. 9 липня 2004. Solution ID CS-013007. Процитовано 19 грудня 2006.
- Тим Джексон, 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.