В истории программирования не всегда все было легко и безоблачно. Ведь любому программисту, вне зависимости от опыта и технического бэкграунда, трудно уберечься от ошибок и порой даже небольшого количества плохого кода хватало, чтобы вызвать серьезную проблему. «Библиотека программиста» немного полистала ИТ-летописи и нашла для вас 10 самых худших ошибок в истории кодинга. Поехали!
1. Ошибка 2000 года
Более двух десятилетий назад, в канун нового 2000 года, весь развитый мир охватила паника из-за проблемы способной привести к сбоям в работе компьютеров, падению самолетов, прекращению работы медицинского оборудования и разрушению глобальной финансовой системы.
Суть проблемы заключалась в том, что большинство устаревших информационных систем, созданных еще в 70-х и 80-х, использовали только две цифры для исчисления года. Это значит, что часы внутри микропроцессоров различного аппаратного ПО регистрировали 1999 год как «99», основываясь на ошибочном предположении разработчиков прошлого, что мы всегда будем жить в 20-м веке и цифра «19» в обозначении года никогда не изменится.
Тогда все полагали, что в 2000 году у всех нас наверняка будут реактивные ранцы, еда в форме таблеток, футуристическая серебристая униформа и человечество к этому времени откажется от старых компьютерных систем середины века. Но чуда не случилось!
И в канун всеми любимого праздника мир охватила полномасштабная паника. Кто-то усердно работал над внедрением обходных путей, выделяя на эти цели колоссальные средства. Другие же вообще не чинили, не исправляли и не обновляли свои системы. Кто из них был прав, сейчас сказать сложно, но когда наступил рубеж тысячелетий, глобальной катастрофы не произошло. Однако у всей этой шумихи, все же был положительный эффект. До общественности наконец начало доходить, как много жизненно важных систем зависит от компьютеров и микропроцессоров и как важно следить за их ПО и своевременно его обслуживать.
2. Терак-25
Плохой код на самом деле может убить. Такая катастрофа произошла с аппаратом лучевой терапии Therac-25, произведенным компанией Atomic Energy of Canada, ставшего причиной гибели не менее шести пациентов. Расследование выявило недоработку системы, вызвавшую передозировку радиацией. Связано это было с трудностью проведения автоматизированных тестов такого специфического программного обеспечения. И поэтому машина, призванная помочь людям, стала машиной для убийств из научной фантастики. Этот случай заставил разработчиков ПО медицинской отрасли крайне ответственно подходить к тестированию такого оборудования.
3. Сеть AT&T выходит из строя
15 января 1990 года около 50 процентов мобильной сети AT&T вышло из строя. За девять часов простоя более 75 миллионов звонков остались без ответа. И хотя в первоначальных отчетах следствия по этому делу значилось хакерская атака, на самом деле, виновником сего происшествия стало стандартное обновление ПО. Ошибка всего в одной строке кода стоила компании огромных денег. Все организации, целиком зависящие от наличия и качества связи, выставили AT&T иски с внушительными суммами. К примеру, крупнейший авиаперевозчик American Airlines, понес колоссальные финансовые убытки из-за того, что получил наполовину меньше звонков своих клиентов из-за сбоя. Авария 1990 года до сих пор служит прекрасным примером важности тестирования программного обеспечения и служит напоминанием о неразрывной связи между технологиями и экономической деятельностью большинства компаний.
4. Досрочное освобождение заключенных
В 2005 году в США штате Мичиган произошел сбой тюремной программы, отвечающей за расчет срока наказания заключенных, в результате чего более 20 заключенных досрочно вышли на свободу. Программа ошибочно посчитала смягчающий коэффициент и снизила срок пребывания отбывающих наказание людей в несколько раз. Ошибку в коде заметили не сразу, а лишь по прошествии некоторого времени. И поэтому меру пресечения счастливчикам никто не пересчитывал. Среди них, к слову, не было матерых гангстеров и маньяков. В основном это были мелкие правонарушители, отбывавшие срок за неуплату алиментов, махинации с налогами и незаконное хранение психотропов.
Произошедшее показывает, что в погоне за автоматизацией процессов и сокращением количества ручных операций программисты зачастую забывают о грамотной настройке разработанной системы и ее тестировании. А мы с вами в очередной раз убеждаемся, что даже незначительная ошибка может привести к серьезным последствиям.
5. Взрыв Ariane 5
Случай произошел 4 июня 1996 года при первом запуске Ariane 5 — одной из самых надежных беспилотных ракетных установок, целью которой было изучение взаимодействия между солнечным ветром и магнитосферой Земли. Через 37 секунд после старта ракета, вылетевшая с космодрома, находящегося на берегах Французской Гвианы, развернулась на 90 градусов и всего через несколько секунд превратилась в огромный огненный шар.
Специальная группа прочесала место происшествия, собирая обломки, чтобы попытаться выяснить, что произошло. Через некоторое время техническая комиссия установила, что авария была вызвана программным сбоем.
Отказ системы произошел из-за полной потери информации о точности наведения ракеты и ориентации ее в пространстве, поступающей в центральный процессор. Потеря — следствие ошибки проектировщиков ПО и вызвана она была некорректным преобразованием 64-битного числа с плавающей запятой в 16-битное целое число.
К слову, целочисленное переполнение является широко распространенной ошибкой в компьютерном программировании.
6. Ошибка Paypal
Что бы вы сделали, если бы PayPal случайно зачислил на ваш счет 92 квадриллиона долларов? Крису Рейнольдсу, 56-летнему американцу, продающему автозапчасти на eBay, не пришлось долго об этом думать. Ведь он даже не успел ощутить себя первым в мире квадриллионером и самым богатым человеком в мире, так как ошибка была устранена в течение нескольких минут. Поэтому, прежде чем мужчина начал мечтать о новом кадиллаке и золотой карте члена королевского яхт-клуба, сумма на его счету вернулась к привычному балансу. Конечно, стоило бы потребовать с компании хотя бы часть этой суммы за моральный ущерб, но, видимо, шок от увиденного не позволил ему сделать это.
7. Калькулятор Windows
Эта ошибка, существующая в большинстве версий Windows (кроме Windows 10), которую вы сможете проверить самостоятельно.
Для этого нужно:
- Открыть калькулятор Windows и ввести 4.
- Извлечь из этого числа квадратный корень и получите 2.
- Вычесть из него 2 и вместо нулевого результата в разных версиях Windows вы увидите разные результаты.
Причиной ошибки является недоработка, вызванная некорректным обращением калькулятора с операциями sqrt. В итоге результаты сохраняются как числа с плавающей запятой, а не целые числа, вызывая ошибку точности при дальнейших вычислениях, которую вы можете видеть.
Microsoft признала эту ошибку в приложении калькулятора и исправила ее в Windows 10.
8. Проблема 2038 года
Ошибка 2038 будет вызвана использованием 32-разрядных процессоров в 32-разрядных системах. Проще говоря, 19 января 2038 года наступит в 03:14:07. Компьютеры, которые все еще используют 32-разрядные системы для управления датой и временем, не смогут справиться с этим изменением. Как и в случае с ошибкой 2000 года, компьютеры не смогут отличить 2038 год от 1970 года.
Однако волноваться не стоит: почти все современные процессоры в настольных ПК имеют 64-битные системы с 64-битным программным обеспечением и в 2038 году само существование 32-битных систем будет под вопросом.
9. Видео Gangnam Style «сломало» YouTube
Счетчик YouTube ранее использовал 32-битное целое число для определения максимального количества просмотров видеоролика, и равно оно было 2 147 483 647.
Однако корейская поп-группа PSY, выложившая на сервис свой клип с зажигательной песней Gangnam Style благополучно его сломала, превысив допустимую планку.
«Когда мы его делали, никогда не думали, что какое-нибудь видео посмотрят столько раз, но это было до Gangman Style», — написал на своей странице в сети один из разработчиков портала.
Клип PSY опубликовали 15 июля 2012 года и к концу мая 2014 года он стал единственным видеороликом, которой просмотрели больше 2 млрд раз.
В настоящее время YouTube использует 64-битное целое число для счетчика видео, что означает, что максимальное количество просмотров видео составляет 9,22 квинтиллиона.
10. Синий экран смерти
BSOD или «Синий экран смерти» — жаргонное название фатальной системной ошибки Windows, показывающей системный сбой, при котором операционка достигала состояния, в котором она больше не могла надежно работать. Как правило, вызывалась она в Windows 95-98 после неожиданного завершения важного процесса или общего сбоя оборудования. Старожилы наверняка помнят этот баг, который довольно часто возникал на заре становления ИТ-культуры.
16 марта 2000 года Microsoft выпустила обновление для системы безопасности, устраняющее эту неполадку, однако и сейчас на форумах изредка можно встретить сообщение от пользователей об этой проблеме.
***
Людям свойственно совершать ошибки. Однако, будьте внимательны — всегда нужно помнить, что даже одна плохо написанная строчка кода может привести к печальным последствиям. Удачи!
Материалы по теме
- ⚠️ 10 самых распространенных ошибок, ежедневно допускаемых каждым программистом
- ⚠️ Как не нужно учить TypeScript: 5 распространенных ошибок
- 😢 Дорогостоящие ошибки: почему нам пришлось отказаться от Firebase
9 сентября 1945 года официально был зарегистрирован первый в истории баг. Именно в этот день ученые Гарвардского университета, тестировавшие вычислительную машину Mark II Aiken Relay Calculator, нашли мотылька, застрявшего между контактами электромеханического реле. Грейс Мюррей Хоппер (американская ученая-компьютерщица и контр-адмирал ВМС США) записывает в журнал — «Первый реальный случай обнаружения ошибки (бага, жучка)».
Не допустить ошибок при создании программ чрезвычайно сложно. К счастью, не все ошибки обходятся дорого и не все становятся достоянием публики. Однако некоторые наносят большие убытки. В этом списке — некоторые самые известные или дорогие ошибки в программном обеспечении.
Взрыв Ariane 5
4 июня 1996 года ракета Ariane 5, запущенная Европейским космическим агентством (ESA), взорвалась всего через сорок секунд после запуска из Куру во Французской Гвиане. Ракета осуществляла первый полет после десятилетия разработки, стоившего 8 миллиардов долларов, а результатом этой ошибки стала потеря в 370 миллионов долларов.
Причиной отказа было целочисленное переполнение, которое является широко распространенной ошибкой в компьютерном программировании. В этом случае была предпринята попытка уместить 64-битное число в 16-битной переменной.
PayPal подарил пользователю 92 квадриллиона долларов
Когда Крис Рейнольдс открыл свой PayPal, остаток на счету торговца из Пенсильвании составлял 92 233 720 368 547 800 долларов. И на короткое время Рейнольдс стал самым богатым человеком в мире.
Ошибка была быстро обнаружена, и к тому времени, как он вошел в систему второй раз, его учетная запись уже обнулилась.
PayPal предложил выплатить неопределенную сумму денег на благотворительность по выбору Рейнольдса.
Ошибка калькулятора Windows
Эта ошибка существует в большинстве версий Windows (кроме Windows 10), включая Windows XP, Windows 7, Windows Vista и Windows 8. Вы можете проверить баг в своей ОС, если у вас есть одна из этих версий.
Откройте калькулятор Windows, введите 4 и извлеките квадратный корень, вы получите два, а затем вычтите из него два. Вместо нулевого результата вы увидите разные результаты в разных версиях Windows.
Причина ошибки заключается в том, как калькулятор обрабатывает операции извлечения корня. естественно, что результаты сохраняются как числа с плавающей запятой, а не как целые, и ошибки в точности, когда дело доходит до вычислений с плавающей запятой, являются тем, что вы видите.
Microsoft признала эту ошибку в приложении калькулятора и исправила ее в Windows 10 Build 17639.
Метрическая система и марсианский климатический спутник НАСА
Марсианский климатический орбитальный аппарат, построенный за 125 миллионов долларов, представлял из себя 338-килограммового космического робота, он был запущен 11 декабря 1998 года для изучения марсианской атмосферы и работы в качестве ретранслятора связи для марсохода в программе Mars Surveyor ’98.
Когда робот собирался выйти на орбиту планеты, связь прервалась. Орбитальный аппарат вошел в атмосферу Марса под неправильным углом, а не вышел на орбиту планеты. Причина заключалась в том, что навигационная группа в Лаборатории реактивного движения (JPL) использовала метрическую систему в своих расчетах, а Lockheed Martin в Денвере предоставил важные данные об ускорении в имперской системе — различные метрики вступили в конфликт друг с другом и уронили спутник.
Ошибка Pentium FDIV
Ошибка была обнаружена профессором математики Томасом Найсли в 1994 году. Эта ошибка является аппаратной ошибкой, затрагивающей модуль операций с плавающей запятой первых процессоров Intel Pentium. Из-за ошибки процессор может возвращать неверные результаты при делении чисел. Intel объяснил сбой отсутствием записей в справочной таблице, используемой схемами деления с плавающей запятой.
Не все процессоры имели этот сбой, но было обнаружено около 5 миллионов дефектных чипов. Intel вначале согласился заменить чип только в том случае, если клиенты смогут доказать, что на них повлияли результаты неправильных вычислений. Однако позже компания заменила чипы всем, кто пожаловался. В результате Intel это обошлось в 475 миллионов долларов.
Отказ ракеты Patriot
25 февраля 1991 года, во время войны в Персидском заливе, ракетная батарея Patriot в Саудовской Аравии не смогла отследить и перехватить приближающуюся иракскую ракету «Скад». Ракета «Скад» попала в казармы американской армии. В результате чего 28 солдат погибли, еще около сотни получили ранения.
Проблема заключалась в неточном подсчете времени из-за накапливаемых арифметических ошибок. Тех самых пресловутых операций с плавающей запятой. Возникающая ошибка округления после 8 часов работы приводила к тому, что система начинала промахиваться на 20%, а после 20 часов работы батарея уже не была способна поражать цели.
Примечательно, что Patriot Project Office ранее получил данные о дефекте в ракетной системе. Однако военные не приняли во внимание наличие ошибки заявив, что система предназначена для краткосрочных защитных операций, и что никто никогда не будет использовать систему больше 8 часов.
Gangnam Style сломал YouTube
Раньше счетчик YouTube использовал 32-битное целое число для определения максимального количества просмотров. Оно может достигать 2 147 483 647.
Видео Gangnam Style превысило это максимальное значение и мы получили известную ошибку переполнения.
В результате сейчас YouTube использует 64-битное целое число для своего счетчика. Это означает, что максимальное количество просмотров может достичь 9.22 квинтиллиона.
Заключение
Мы люди, и иногда делаем ошибки. Но будьте осторожны! Простая строка кода с ошибкой может стоить сотни миллионов долларов. Большое вам спасибо, что прочитали статью. Надеюсь, она показалась вам любопытной и забавной!
Источник
Если вы нашли опечатку — выделите ее и нажмите Ctrl + Enter! Для связи с нами вы можете использовать info@apptractor.ru.
Ошибки допускают все и это нормально. Вот только иногда некоторые ошибки приводят к огромным тратам и даже к гибели людей. Итак, самые ужасные ошибки, допущенные программистами.
Integer overflow
Ракета-носитель Ariane 5 была запущена в 1996 году. Стоимость создания этой ракеты составила около 7 миллиардов долларов, а авария, которая произошла во время отрыва обошлась в 500 миллионов долларов. Ошибка была вызвана благодаря Integer overflow. Дело в том, что система попыталась впихнуть 64-bit floating point number в 16-bit signed integer. Это привело к ошибке, а в последствии к большому взрыву.
Символ, стоимостью 135 миллионов $
Космический аппарат Mariner 1 был запущен в 1962 году с целью первого полета вокруг Венеры. Практически с первых минут что-то начало идти не так и он сильно отклонился от заданого маршрута. Чтобы аппарат не упал на населенный пункт было принято решение взорвать его.
Считается, что ошибкой тому могла была быть точка вместо запятой. Таким образом код мог быть неправильно понятым компьютером и соответсвенно вызвал баги в системе.
Кроме того, считается что всему вина неправильно записанная формула. Так, формула Rn была записана без верхнего подчеркивания. Как бы там не было, но ошибка скрывается всего в одном символе, который кто-то когда-то неправильно записал.
Ошибка с Windows NT
В 1996 году на один из крейсеров было принято решение установить специальное ПО, так называемое Windows NT. Это было сделано в целях оптимизировать работу персонала, а также дополнительно облегчить им эту работу.
Корабль работал исправно в течении года, пока не произошел один случай. Один из членов экипажа ввел в базу данных число 0, что делать не надо. В системе не было установлена обработка подобного случая, что привело к делению на ноль. В итоге система запуталась и отключилась. Корабль дрейфил в полной отключке около трех часов.
К счастью, все обошлось, но если бы подобное случилось в бою или же во время шторма, то все могло сложиться не так успешно!
Взрыв газопровода в Сибири
Благодаря Канаде в 1982 году, ребята из ЦРУ узнали информацию о том, что КГБ планирует украсть у них систему управления газопроводом. Было принято решение дать троян, который постепенно бы ухудшал систему газопровода в СРСР и привел бы к взрыву. Так и случилось. КГБ клюнули на небольшой слив информации и подцепили настоящий вирус.
Поначалу режим управления насосами работал правильно, но при проведении тестового режима произошел крупный взрыв, который на сегодняшний день считается самым большим неядерным взрывом за всю историю человечества.
Ошибка в системе может быть невероятно дорогой и трудно устранимой, не говоря уже об унизительной публичной огласке. Мы собрали самые крупные программные катастрофы всех времен.
Червь Морриса, 1988 год
Не все дорогостоящие ошибки в программном обеспечении происходят в крупных компаниях или правительственных организациях.
Одна из самых дорогих ошибок была вызвана одним студентом. Студент Корнельского университета в рамках эксперимента создал червя, который в итоге распространился как лесной пожар и вывел из строя десятки тысяч компьютеров из-за ошибки в кодировке.
По задумке Морриса, червь должен был безобидно путешествовать по компьютерам, перезаписывая свои копии. Но из-за программной ошибки, он это делал бесконечное число раз и, фактически, выжимал все ресурсы компьютеров.
Это сделало червя Морриса, по сути, первым заразным компьютерным вирусом.
Червь стал распространяться дальше. Были выведены из строя шесть тысяч интернет-узлов ARPANET (прототип интернета от минобороны США).
Аспирант Роберт Таппан Моррис был обвинен и осужден за преступный взлом и оштрафован на 10 тысяч долларов, хотя стоимость созданного им беспорядка оценивалась в 10 миллионов долларов.
Однако история простила Морриса Этот инцидент дал опыт — открыл уязвимость и улучшил цифровую безопасность. В наши дни Моррис является профессором Массачусетского технологического института, а исходный код червя хранится как музейный экспонат на дискете в Бостонском университете.
Космический корабль «Маринер-1», 1962 год
НАСА запускало беспилотный космический аппарат для сбора данных, чтобы пролететь около Венеры. Все пошло не по плану.
Космический зонд «Маринер-1» едва успел покинуть мыс Канаверал, как ракета опасно отклонилась от курса. Обеспокоенные тем, что ракета направляется к аварийной посадке на Землю, инженеры НАСА подали команду на самоуничтожение, и аппарат был уничтожен примерно через 290 секунд после запуска.
Расследование показало, что причиной стала очень простая программная ошибка. В одной из строк кода был пропущен дефис, в результате чего на космический корабль были отправлены неверные сигналы наведения. Стоимость ошибки превысила 18 миллионов долларов (около 169 миллионов долларов в современном мире).
Ошибка Pentium FDIV, 1994 год
Ошибка Pentium FDIV — это любопытный случай незначительной проблемы, которая разрослась из-за массовой истерии.
Томас Нисли, профессор математики, обнаружил недостаток в процессоре Pentium и сообщил об этом в Intel. В ответ на это компания предложила замену чипа всем, кто мог доказать, что он пострадал от этой ошибки.
Первоначальная ошибка была относительно простой: проблема была в таблице поиска алгоритма чипа. Это могло привести к крошечным неточностям в расчетах, но только в очень редких случаях. Фактически, вероятность возникновения ошибки в расчетах составляла всего 1 к 360 миллиардам.
Хотя реальные последствия ошибки в программном обеспечении были незначительными, когда информация об ошибке попала в международную прессу, миллионы людей потребовали замены чипа, что обошлось Intel в сумму до 475 миллионов долларов.
440 млн долларов в неудачных сделках, 2012 г.
Потеря 440 млн долларов — это плохой день в офисе по любым меркам. Тем более, когда это происходит всего за 30 минут из-за ошибки программного обеспечения, которая стирает 75% стоимости одной из крупнейших в мире групп капитала.
Knight Capital Group инвестировала в новое торговое программное обеспечение, которое должно было помочь им сорвать куш на фондовых рынках. Но вместо этого оно погубило их компанию. Несколько ошибок в программном обеспечении привели к тому, что компания Knight начала безумные покупки, потратив более 7 миллиардов долларов на сотни различных акций.
В итоге непреднамеренные сделки обошлись компании в 440 миллионов долларов, и Goldman Sachs пришлось вмешаться, чтобы спасти ее. Компания Knight так и не смогла оправиться, и менее чем через год была приобретена конкурентом.
Arian 5, полет V88, 1996 г.
Учитывая сложность и дороговизну освоения космоса, неудивительно, что в нашем списке всех ошибок программного обеспечения есть несколько неудачных космических миссий.
Ракета должна была доставить исследовательские спутники Европейского космического агентства.
Но всего через 36 секунд после первого запуска ракетные двигатели отказали из-за того, что инженеры повторно использовали несовместимый код от Ariane 4 и ошибки преобразования 64-битных данных в 16-битные.
В результате неудачи ЕКА понесло убытки в размере 370 миллионов долларов, а по итогам последующего расследования было выработано множество рекомендаций, включая призывы к улучшению анализа и оценки программного обеспечения.
Открытие терминала 5 в Хитроу, 2008 год
Представьте себе, что вы готовитесь к долгожданному отпуску или важной деловой поездке, но обнаруживаете, что ваш рейс задержан, а багажа нигде нет.
Именно это произошло с тысячами путешественников после открытия Терминала 5 в Хитроу в марте 2008 года, и виной всему стало неработающее программное обеспечение. Проблема заключалась в новой системе обработки багажа, которая хорошо показала себя на испытаниях, но в реальной жизни потерпела неудачу. Это привело к массовым сбоям, таким как неисправность багажных лент и тысячи потерянных или отправленных не по назначению вещей.
Ошибка тысячелетия, 2000 год
Ошибка тысячелетия, она же пресловутая Y2K, была широко распространенной проблемой накануне 2000 года.
Была совсем не опасной, но посеяла панику, из-за чего привела к убыткам.
Ответом было «в общем-то, неплохо». Ошибка тысячелетия не вызвала особых проблем в реальной жизни, поскольку большинство систем заранее внесли коррективы. Однако страх, вызванный потенциальными последствиями в конце 1999 года, стоил тысячам людей значительных сумм денег, потраченных на планирование и подготовку к чрезвычайным ситуациям. Госучреждения, предприятия и даже семьи ожидали худшего.
В США потратили огромное количество средств на решение этой проблемы. Зараты составили около 100 миллиардов долларов.
9 сентября 1945 года официально был зарегистрирован первый в истории баг. Именно в этот день ученые Гарвардского университета, тестировавшие вычислительную машину Mark II Aiken Relay Calculator, нашли мотылька, застрявшего между контактами электромеханического реле. Грейс Мюррей Хоппер (американская ученая-компьютерщица и контр-адмирал ВМС США) записывает в журнал — «Первый реальный случай обнаружения ошибки (бага, жучка)».
Не допустить ошибок при создании программ чрезвычайно сложно. К счастью, не все ошибки обходятся дорого и не все становятся достоянием публики. Однако некоторые наносят большие убытки. В этом списке — некоторые самые известные или дорогие ошибки в программном обеспечении.
Взрыв Ariane 5
4 июня 1996 года ракета Ariane 5, запущенная Европейским космическим агентством (ESA), взорвалась всего через сорок секунд после запуска из Куру во Французской Гвиане. Ракета осуществляла первый полет после десятилетия разработки, стоившего 8 миллиардов долларов, а результатом этой ошибки стала потеря в 370 миллионов долларов.
Причиной отказа было целочисленное переполнение, которое является широко распространенной ошибкой в компьютерном программировании. В этом случае была предпринята попытка уместить 64-битное число в 16-битной переменной.
PayPal подарил пользователю 92 квадриллиона долларов
Когда Крис Рейнольдс открыл свой PayPal, остаток на счету торговца из Пенсильвании составлял 92 233 720 368 547 800 долларов. И на короткое время Рейнольдс стал самым богатым человеком в мире.
Ошибка была быстро обнаружена, и к тому времени, как он вошел в систему второй раз, его учетная запись уже обнулилась.
PayPal предложил выплатить неопределенную сумму денег на благотворительность по выбору Рейнольдса.
Ошибка калькулятора Windows
Эта ошибка существует в большинстве версий Windows (кроме Windows 10), включая Windows XP, Windows 7, Windows Vista и Windows 8. Вы можете проверить баг в своей ОС, если у вас есть одна из этих версий.
Откройте калькулятор Windows, введите 4 и извлеките квадратный корень, вы получите два, а затем вычтите из него два. Вместо нулевого результата вы увидите разные результаты в разных версиях Windows.
Причина ошибки заключается в том, как калькулятор обрабатывает операции извлечения корня. естественно, что результаты сохраняются как числа с плавающей запятой, а не как целые, и ошибки в точности, когда дело доходит до вычислений с плавающей запятой, являются тем, что вы видите.
Microsoft признала эту ошибку в приложении калькулятора и исправила ее в Windows 10 Build 17639.
Метрическая система и марсианский климатический спутник НАСА
Марсианский климатический орбитальный аппарат, построенный за 125 миллионов долларов, представлял из себя 338-килограммового космического робота, он был запущен 11 декабря 1998 года для изучения марсианской атмосферы и работы в качестве ретранслятора связи для марсохода в программе Mars Surveyor ’98.
Когда робот собирался выйти на орбиту планеты, связь прервалась. Орбитальный аппарат вошел в атмосферу Марса под неправильным углом, а не вышел на орбиту планеты. Причина заключалась в том, что навигационная группа в Лаборатории реактивного движения (JPL) использовала метрическую систему в своих расчетах, а Lockheed Martin в Денвере предоставил важные данные об ускорении в имперской системе — различные метрики вступили в конфликт друг с другом и уронили спутник.
Ошибка Pentium FDIV
Ошибка была обнаружена профессором математики Томасом Найсли в 1994 году. Эта ошибка является аппаратной ошибкой, затрагивающей модуль операций с плавающей запятой первых процессоров Intel Pentium. Из-за ошибки процессор может возвращать неверные результаты при делении чисел. Intel объяснил сбой отсутствием записей в справочной таблице, используемой схемами деления с плавающей запятой.
Не все процессоры имели этот сбой, но было обнаружено около 5 миллионов дефектных чипов. Intel вначале согласился заменить чип только в том случае, если клиенты смогут доказать, что на них повлияли результаты неправильных вычислений. Однако позже компания заменила чипы всем, кто пожаловался. В результате Intel это обошлось в 475 миллионов долларов.
Отказ ракеты Patriot
25 февраля 1991 года, во время войны в Персидском заливе, ракетная батарея Patriot в Саудовской Аравии не смогла отследить и перехватить приближающуюся иракскую ракету «Скад». Ракета «Скад» попала в казармы американской армии. В результате чего 28 солдат погибли, еще около сотни получили ранения.
Проблема заключалась в неточном подсчете времени из-за накапливаемых арифметических ошибок. Тех самых пресловутых операций с плавающей запятой. Возникающая ошибка округления после 8 часов работы приводила к тому, что система начинала промахиваться на 20%, а после 20 часов работы батарея уже не была способна поражать цели.
Примечательно, что Patriot Project Office ранее получил данные о дефекте в ракетной системе. Однако военные не приняли во внимание наличие ошибки заявив, что система предназначена для краткосрочных защитных операций, и что никто никогда не будет использовать систему больше 8 часов.
Gangnam Style сломал YouTube
Раньше счетчик YouTube использовал 32-битное целое число для определения максимального количества просмотров. Оно может достигать 2 147 483 647.
Видео Gangnam Style превысило это максимальное значение и мы получили известную ошибку переполнения.
В результате сейчас YouTube использует 64-битное целое число для своего счетчика. Это означает, что максимальное количество просмотров может достичь 9.22 квинтиллиона.
Заключение
Мы люди, и иногда делаем ошибки. Но будьте осторожны! Простая строка кода с ошибкой может стоить сотни миллионов долларов. Большое вам спасибо, что прочитали статью. Надеюсь, она показалась вам любопытной и забавной!
Источник
Если вы нашли опечатку — выделите ее и нажмите Ctrl + Enter! Для связи с нами вы можете использовать info@apptractor.ru.
NASA Mars Climate Orbiter — $193000000 убытков
В американских исследованиях Марса, после Global Surveyor-1996 и Polar Lander-1999 был запланирован третий зонд — Orbiter.
Все три зонда должны были прибыть к Марсу приблизительно в одно “орбитальное окно” — конец сентября 1999 г. Каждому зонду предназначалась своя сфера исследований — поверхность планеты, ее климат, и атмосфера.
Люди в NASA надеялись, что третий зонд в целом успешной серии, после прибытия в целевую точку будет исследовать историю климата Марса, а также искать следы воды на поверхности. После завершения миссии аппарат планировали использовать как коммуникационный передатчик для последующих миссий. После прохода на близком расстоянии от планеты, аппарат должен был восстановить радиоконтакт. Но в назначенное время на связь аппарат не вышел.
Расследование показало, что сбой случился из-за навигационной ошибки. Точнее, из-за того, что кто-то не учел разницу между английскими-имперскими (и американскими) — и общепринятыми в остальном мире “континентальными” единицами измерения. Отправляемые команды были рассчитаны на формат ускорения “фунт в секунду”, а должны были — “ньютон в секунду”. Если бы управляющий код был кем-то добросовестно протестирован….
В результате Orbiter просрочил свой выход из навигационного маневра, приблизился слишком сильно к поверхности планеты — всего лишь на 57 километров от поверхности, где разумеется атмосфера была уже слишком плотной, для околокосмической скорости аппарата. Аппарат разрушился, то есть сгорел от трения в воздухе.
Mariner 1 — $18000000 убытков
“Инцидент с Mariner 1”, известный также как “самый дорогой минус в истории”, это второй эпический фэйл NASA. Кто-то забыл поставить “минус”, а кто-то не проверил код, что повлекло убытки на миллионы долларов.
Аппарат был запущен 22.06.1962 в 9 утра. На 5-й минуте полета резко поменял траекторию. “Маринер”, на которой NASA возлагала большие надежды, самые жаркие месяцы космической гонки, бравурный запуск Кеннеди уже назвал историческим — и спутник упал и разрушился.
Официальный отчет NASA гласит: “В начале полета ускорители работали в штатном режиме. Затем случилось непредвиденное отклонение от запланированной траектории, это зафиксировал сотрудник, отвечающий за точность траектории. Причиной отклонения оказалась ошибка в коде управления полетом. Это привело аппарат к резкому отклонению и угрозе падения в океан, в районе активного судоходства. Сотрудник, обнаруживший отклонение, дал команду самоликвидации аппарата.”
Через несколько дней в “Нью-Йорк Таймс” вышла статья, в которой NASA попыталась объяснить налогоплательщикам, почему дорогостоящий спутник потерпел крушение. Было сказано, что это случилось в результате ошибочного пропуска знака “-” в математических уравнениях в коде программы. Программист NASA пропустил нужный символ во время пакетного ввода огромного количества информации в бортовую систему аппарата.
Еще через несколько дней Ричард Моррисон, пресc-офицер NASA, представлял причины катастрофы перед Конгрессом, где выражался более конкретно и подчеркнул важность маленькой ошибки. “Этот знак минуса фактически дал указание аппарату игнорировать поступающие данные, пока не восстановится связь со станцией управления. Если этого минуса нет, получается что в компьютер поступает ошибочная информация. В данном случае бортовой компьютер направил команду “резко влево, нос к земле”, в результате чего аппарат упал с разрушением”.
Крушение ракеты Ariane 5 — запуск 501 — $8000000 убытков
В 1996 году ракета-грузовик без экипажа, принадлежавшая Европейскому космическому агентству, запущенная на экваториальном космодроме Куру в Латинской Америке, взорвалась на 40-й секунде полета. Это был первый запуск ракетоносителя. На разработку и доводку ракеты ушло 10 лет и миллионы долларов.
Причины прояснились через две недели. Комиссия выяснила, что причиной взрыва был сбой в программе управления инерциальной системой ориентировки. Оказалось, что софт не обновляли от 4-й версии ракеты, а просто установили “как есть” на 5-ю. А новая версия ракеты была оснащена более мощным двигателем, с которым старая система управления попросту не справилась.
Дальнейшее расследование уточнило причины. Оказалось, что дело не только в смене версий. В программе 64-битное число с плавающей точкой, описывающее горизонтальную скорость, конвертировалось в 16-битное целое число. Число оказалось больше чем допустимые 32767 (самое большое число для 16-битного целого как ты помнишь?), и преобразование не было обработано корректно. Двигатель перешел в нештатный режим на 39-й секунде, ракета сразу же начала разрушаться “от неправильного баланса аэродинамических сил”.
Ошибка в процессоре Pentium — $475000000 убытков
“Ошибка FDIV” в процессоре Pentium стала самым известным багом микропроцессоров Intel. Новое разрекламированное поколение процессоров заявлялось как “быстрое и точное”, вместо этого стало печально известно как буквально кишевшее багами, а самый крупный из них — ошибка в таблице поиска в интелловском SRT-алгоритме (“выбор кратчайшего времени”).
Руководство Intel поставило инженерам задачу: в новом процессоре ускорить вычисление скалярного кода с плавающей точкой в 3 раза, и векторного кода в 5 раз, по сравнению с древней серией 486DX. В Intel решили применить перспективный SRT-алгоритм, генерирующий по два коэффициентных бита на такт. Старый алгоритм “сдвига с вычитанием” в 486-й серии генерировал один коэффициентный бит на такт. Такой SRT-алгоритм задействует таблицу поиска в вычислении промежуточных коэффициентов, связанных с делением чисел с плавающей точкой. Таблица поиска изготовленная инженерами Intel состояла из 1066 ячеек. Из них, “благодаря” ошибке программиста, 5 ячеек некорректно передавались в логическую матрицу (PLA). Если любая из этих бракованных 5 ячеек запрашивалась из модуля вычислений с плавающей точкой (FPU), она выдавала значение “0” вместо положенного “+2”. Это искажало вычисления в модуле и иногда приводило к заметно менее точному результату (ошибка в четвертом разряде после точки), причем из-за “рекурсивной” природы SRT-алгоритма такие ошибки “накапливались”.
В основном, все же, точность вычислений “пентиума” страдала лишь в 9 или 10 разряде после точки. Впрочем, покупатели и клиенты не очень-то слушали эти оправдания, и бодро подавали в суд, как поодиночке так и целыми компаниями, что и сформировало впечатляющую сумму убытков Intel.
Червяк Моррис — $100000000 убытков
Оказывается бывает не только в плохом кино, когда студент-программист, пытающийся решить свою учебную задачу, случайно создает червя, приносящего убытков на 100 миллионов долларов (учитывая выплаченные компенсации и неустойки, как и в остальных случаях выше и ниже). Это произошло в далеком 1988 году. Роберт Моррис, студент последнего курса Корнуэльского университета, судя по всему действительно случайно создал опаснейший зловред. (Детальнее об этом сюжете можно почитать на сайте Университета Юты). Он выполнял “невинный эксперимент”, и сделал, как он уверял под присягой, случайную ошибку в коде. Червь вырвался на свободу и заразил тысячи компьютеров, которые в то время в Америке уже стали вполне обычным рабочим инструментом в офисах.
Роберта обвинили в хакерстве, и для начала оштрафовали на 10 тысяч долларов. Позже сумма причиненных убытков — всем потерпевшим — достигла 100 миллионов, так как компаниям пришлось восполнять недополученную прибыль, простои и т.п.
Адвокат Роберта доказывал, что не все так плохо, что червь “помог усовершенствовать системы безопасности”, создать такую вещь как антивирусы, а также познакомил широкую публику и компании с такой опасной вещью как компьютерные вирусы. Как-то выпутавшись из проблем (суд ему, в целом, поверил — что это был случайный непроверенный баг), Роберт основал фирму “Y Combinator”. Сейчас он профессор в самом уважаемом американском вузе — Массачусетском Технологическом (МИТ). Изъятая как вещественное доказательство 3,5-дюймовая дискета покоится в Музее Бостонского университета.
Банкротство спекулянтов из Knight — 440 миллионов долларов
Что будет, если самая хайповая из компаний-спекулянтов на американском фондовом рынке начинает некорректно работать с акциями: покупать слишком дорого, а продавать слишком дешево? Плохая идея, впереди банкротство? Именно это и случилось.
В разгар летних отпусков, 1 августа 2012, случилось нечто — кошмар для СЕО любой компании. То, что строилось 17 лет, рухнуло буквально за пару часов. Новый трейдинговый софт компании Knight содержал баг, который активировался когда Нью-Йоркская биржа открылась утром. Некорректный софт заставил компанию перейти в режим автоматической покупки акций, и пока руководство пыталось понять что происходит, то оказалось что куплены акции 150 компаний, на сумму 7 миллиардов долларов — и это лишь за первый час такого “трейдинга”.
Компания попыталась отменить последние торги, но американская Комиссия по фондовым биржам не дала разрешения: даже такая крупная компания как Knight, и даже при таком огромном объеме покупок акций, все-таки не превысила установленный правилами порог в 30% роста цен, при котором торги могут отменить. Исключение составили лишь 6 крупных транзакций, которые и были отменены, а все остальные убытки пришлось принять.
Катастрофа для компании: менеджменту стало ясно, что все ошибочно купленные активы нужно распродавать с большим убытком. Ситуацию немного смягчила Goldman Sachs, выкупив остатки этой некогда мощнейшей и перспективной компании.
Баг 2000 года. Полтриллиона долларов убытков
Одна неправильная буква, точнее цифра, способна принести убытков в полтриллиона долларов. Так случилось более двадцати лет назад, в канун нового столетия и тысячелетия. В англоязычном мире этот феномен был известен как Y2K Bug, или “миллениум-баг”. Коротко: компьютеры неправильно обрабатывали все даты позже 31 декабря 1999 г.
Как оказалось, в большинстве компьютеров той эпохи подсистема времени, а именно дат, оставалась почти без изменений с 1960х-1980х и до конца 1990х. Тогда было принято строжайше экономить место в памяти, довольствуясь всего двумя цифрами даты, последними, а “19” (почти) всегда отбрасывали (впрочем, так и сейчас, но конечно выводы из Y2K Bug сделаны). Дефицит места в памяти, из-за дороговизны компьютеров вообще, и планок памяти в частности, а потом инерция — отсюда жесткие ограничения на каждый байт.
Неумолимо приближалось новое столетие, и лишь немногие программисты понимали, что компьютеры, спроектированные, на своем базовом уровне в 1960е-1970е, могут неправильно принимать введенную дату. А именно, дату “00” компьютер принимал как “1900”-й год. Конечно, подобное недоразумение могло повлечь серьезнейшие последствия если речь шла об инфраструктуре, или повреждение пользовательских данных.
Громче всех паниковали СЕО банков — например, как считать проценты, если депозит “вернулся в прошлое” на сто лет? Множились опасения также в транспортной сфере, на электростанциях, и в других объектах инфраструктуры.
Реагируя на панику в СМИ, в США приняли специальный закон “О готовности к 2000 году”, призванный подготовить инфраструктуру и банки к знаменательной дате “миллениума”. Президент Клинтон создал “Совет по проблеме 2000 года”, с собой во главе. Совет, помимо государственной критической инфраструктуры, надзирал над банками, и советовался с их директорами как избежать убытков (которых полностью избежать все-таки не удалось). Общие мировые затраты на проверку инфраструктуры и банков превысили 600 миллиардов (да, миллиардов долларов), по подсчетам компании Gartner.
Такие дела.
Остается лишь надеяться, что сейчас тестируют лучше.
Возможно будет интересно также:













