Мобильное меню


Ещё разделы
ПОДПИСЫВАЙСЯ
Картинки
Форма входа
Реклама
Числовой глюк, который может привести к катастрофе
Познавательное

Числовой глюк, который может привести к катастрофе

Админчег Muz4in.Net Тэги




На удивление простая ошибка поражает компьютеры, контролирующие самолёты, космические корабли и многое другое – они дают сбои, когда обрабатывают большие числа. Это приводит ко взрывам, потере космических зондов и прочим неблагоприятным последствиям.

Вторник 4 июня 1996 года навсегда останется в памяти Европейского космического агентства (ЕКА) как мрачный день. Первый полёт беспилотной ракеты Ariane 5, на которой находились четыре очень дорогих научных спутника, закончился через 39 секунд, преврати всё в шар из дыма и огня. Считается, что взрыв привёл к потере $370 млн (£240 млн).

Что случилось? Это был вовсе не механический сбой или акт саботажа. Нет, запуск закончился катастрофой из-за простой ошибки в программном обеспечении. Компьютер не смог справиться с поставленной задачей потому, что заданное число оказалось больше, чем он ожидал.

Как такое возможно, что компьютеры оказываются неспособными обработать слишком большие числа? Дело в том, что подобного рода ошибки привели к ряду катастроф и провалов в последние годы, разрушив ракеты или направив их не туда и вынудив космические зонды пропасть без вести. Так что же это за ошибки и почему они происходят?

Представьте себе, что вы пытаетесь задать значение – скажем, 169544 километра – на одометре, который рассчитан максимально на 160932 км. Счётчик обнулится до 00000, а затем покажет оставшееся значение – 8612. Именно такая неточность обрекла запуск Ariane 5 на неудачу в 1996 году. Более формально это называется «целочисленным переполнением». По сути это означает, что числа слишком велики для хранения в компьютерной системе, и иногда такая проблема может привести к сбою.

Неудачные запуски

Полное расследование инцидента с Ariane 5 показало, что программное обеспечение, связанное с предыдущим поколением ракет, Ariane 4, зафиксировало неожиданно высокое значение боковой составляющей скорости нового, более быстрого транспортного средства – и программное обеспечение ракеты Ariane 5 не могло справиться с его обработкой. Был запущен процесс самоуничтожения. Через пару секунд ракета была уничтожена.

Такие глюки происходят с удивительной частотой. Предполагается, что причиной, по которой НАСА потеряло контакт с космическим зондом Deep Impact в 2013 году, была связана с достижением целочисленного предела.

В марте 2015 года сообщалось, что самолёт Boeing 787 может пострадать от аналогичной проблемы. Блок управления, отвечавший за подачу энергии к двигателям самолёта, мог автоматически перейти в отказоустойчивый режим – и выключит двигатели – если его оставить включённым более чем на 248 дней. Гипотетически двигатели могли внезапно перестать работать даже в середине полёта. Инструкция Федерального авиационного управления (ФАУ) гласила, что счётчик в программном обеспечении блока управления будет «перегружаться» спустя определённый период времени, вызывая ошибку. И хотя были опубликованы скудные подробности, ФАУ и Boeing отказались комментировать этот пункт. Некоторые наблюдатели-любители указали, что 248 дней (если считать в сотых секунды) равны числу 2147483647 – что очень много.

Так уж получилось, что 2147483647 – это максимальное положительное значение, которое может сохранить «32-битный знаковый регистр», обычно устанавливаемый на большинстве компьютерных систем. На Ariane, для сравнения, программное обеспечение использовало «16-битное» пространство, которое намного меньше и способно хранить максимальное значение 32767.

Загадочный предел

Числа бесконечны, так зачем же устанавливать для них такие ограничения на хранение? Ответ заключается в том, что компьютеры традиционно требуют эффективности во всех вещах. Раньше место для хранения обходилось намного дороже, чем сегодня, и обработка больших значений занимала больше времени. Если вы придерживались определённых ограничений, программное обеспечение работало более гладко. Системы наведения ракет очень быстро выполняют критические вычисления, поэтому такие ограничения, безусловно, имеют значение. Проблема, как доказала ракета Ariane 5, заключается в том, что они не всегда рассматриваются как проблематичные.

«Мы должны признать, что в программном обеспечении мы всегда приближаемся к реальности, – поясняет Билл Шерлис, эксперт по программному обеспечению из Университета Карнеги — Меллона. – Всегда должен быть инженерный компромисс между стоимостью более точного представления и эффективностью».



Математик Дуглас Арнольд из Университета Миннесоты разместил информацию об инциденте с Ariane 5 на веб-странице под названием «Катастрофы, связанные с плохими вычислениями». Арнольд также выделяет случай, произошедший в 1991 году с ракетой Patriot, которая не смогла перехватить атаку Ирака на казармы армии США во время войны в Персидском заливе. В этом случае ошибка означала, что система противоракетной обороны не смогла зафиксировать запуск и проследить траекторию ракеты «Скад», которая двигалась со скоростью 1,7 км/с, и вместо этого сканировала область воздушного пространства более чем в 500 метрах от цели.

В результате «Скад» угодила в казармы; погибли 28 солдат, и ещё 98 человек получили ранения. Детали этой компьютерной ошибки невероятно сложны, но инженер-программист Эндрю Лум из Университета Сиднея опубликовал наиболее точное объяснение того, что произошло, в том числе представив диаграммы системы Patriot.

Глюк, связанный с Gangnam Style

Не все сбои настолько разрушительны, как примеры, приведённые выше, но они часто приводят к неожиданным последствиям. Например, в видеоигре Civilization подобная ошибка привела к тому, что мирный персонаж Ганди стал невероятно враждебным. Когда игроки выбирали конкретный режим игры, значение, которое определяло агрессивность Ганди, становилось максимальным. Таким образом, Ганди угрожал всем ядерным оружием на каждом шагу – к превеликому удовольствию многих игроков.

Также сообщалось, что Gangnam Style, самое популярное видео всех времён на YouTube, «сломало» счётчик просмотров сайта. Счётчик, по-видимому, был запрограммирован только на 2147483647 – опять же, максимальное положительное значение 32-битного знакового регистра. Это вылилось в отличный пиар-ход для YouTube, который обновил счётчик просмотров, чтобы искупаться в лучах мировой славы самого популярного видео на сайте. Новый максимум превышает девять квинтиллионов.


Клипу Gangnam Style исполнителя Psy приписывают «взлом» счётчиков самого популярного сайта YouTube


Шерлис отмечает, что предыдущее ограничение раскрывает ожидания первоначальных программистов, которые создали YouTube. «Конечно, когда программное обеспечение YouTube только разрабатывалось, я думаю, что разработчикам или дизайнерам было трудно представить, что кто-то превысит [это число]», – говорит он.

Часто именно такое предположение, которое поначалу может казаться разумным, вызывает проблемы спустя несколько лет. Самой обсуждаемой ошибкой в истории, которую многие запомнят, стала так называемая «Проблема 2000 года». Вокруг неё было много шумихи.

В данном случае ошибка была довольно простой. Что происходит, когда вы записываете годы по последним двум цифрам? 1900-й становится идентичным 2000-му году. Многие люди поняли, что это вызовет путаницу в случае с любыми компьютерными системами, хранящими значения годов таким образом. В результате для программистов были заранее опубликованы рекомендации обновить системы до или после 1 января 2000 года. Самолёты не падали с неба, но было несколько любопытных последствий. Например, в японской префектуре Исикава в полночь перестало работать оборудование для обнаружения радиации; 150 игровых автоматов на гоночной трассе в штате Делавэр вышли из строя; несколько веб-сайтов представили новую дату как «1 января 19100 года».


Опасения относительно глобального кризиса, вызванного «Проблемой 2000 года», оказались необоснованными


Двенадцать лет спустя в ходе аналогичного инцидента 105-летняя женщина из Швеции по имени Анна Эрикссон получила письмо с приглашением приступить к получению дошкольного образования, потому что программное обеспечение было нацелено на лиц, родившихся в год, который оканчивался на «07». Дизайнеры имели в виду тех, кто родился в 2007 году, а не в 1907 году, как в случае с госпожой Эрикссон. Неспособность правильно распознать год даже привела к тому, что миллионы немецких кредитных и дебетовых карт стали непригодными для использования в день Нового года в 2010 году.

2038-й год

Много лет назад программисту Уильяму Порке пришла в голову мысль о том, чтобы проанализировать ещё одну важную дату – 03:14:08 UTC 19 января 2038 года. Это тот момент, когда количество секунд, начиная с 1 января 1970 года, превысит одно из максимальных значений, на которые рассчитаны регистры даты и времени многих современных компьютеров. Как и в случае с «Проблемой 2000 года», неспособность подготовиться к этому событию может привести к сбоям в работе компьютеров.

«Я написал об этом впервые в 1999 году, – говорит Порке. – Я приобрёл доменное имя 2038.org, и поначалу это выглядело как ироничная насмешка. Своего рода шутка, с большим количеством компьютерных учёных, которые твердили: "О, да, мы исправим это в 2037 году..." Но потом я осознал, что это реальная проблема».


Столкнёмся ли мы с тем, что январским утром 2038 года компьютеры по всему миру перестанут нормально работать?


Порке обеспокоен старыми битами программного обеспечения, до которых больше никому нет дела – на давно существующих сетях или на старом оборудовании, используемом в отдалённых частях мира. Сколько из них всё ещё будет использоваться через 19 лет и какие последствия это может повлечь за собой, остаётся только гадать.

«Многие компьютерные системы, – отмечает Порке, – могут выйти из строя предсказуемым образом. Но это неудача непредсказуема».

Глюк во времени

Маркус Кун, компьютерный учёный из Кембриджского университета, объясняет, что ошибки, связанные со временем, вызывают интерес отчасти потому, что их последствия непредсказуемы, но также и потому, что они «не являются неожиданными» и что люди могут предсказать, что произойдёт, когда наступит роковая дата.

Кун считает, что «Проблема 2038 года» будет менее значимой, чем «Проблема 2000 года», потому что последняя подготовила компьютерную индустрию ко внесению необходимых исправлений. В самом деле, это часть плана Уильяма Порке. «Я надеюсь, что мне предложат приличную сумму денег за это», – шутит он.


Скорость вращения Земли также может привести к небольшому изменению времени, которое, в свою очередь, повлечёт за собой сбой в работе компьютеров


В качестве ещё одного примера обсуждаемой проблемы можно привести тот факт, что 2015-й год должен был стать на секунду длиннее 2014-го, чтобы исправить несоответствие между астрономическим временем (время на Земле, основанное на вращении нашей планеты) и атомным временем (наиболее точный известный метод учёта времени, с точки зрения подсчёта секунд). Дело в том, что вращение Земли постепенно замедляется. На него могут оказывать влияние такие геологические события, как землетрясения. А это означает, что добавление високосных секунд, в отличие от високосных лет, является переменным.

Кажется, что бы мы ни делали, некоторые вычисления всегда будут сбивать с толку компьютеры, вызывая сбои – или того хуже. «Мы многому научились благодаря "Проблеме 2000 года" и другим подобным событиям, – отмечает Шерлис. – Но реальность состоит в том, что мы вынуждены корректировать вычисления и ориентироваться на инженерный компромисс. И так будет всегда».

Специально для читателей моего блога Muz4in.Net – по материалам сайта bbc.com

Copyright Muz4in.Net © - Данная новость принадлежит Muz4in.Net, и являются интеллектуальной собственностью блога, охраняется законом об авторском праве и не может быть использована где-либо без активной ссылки на источник. Подробнее читать - "об Авторстве"



Вам понравилась статья? Просто перейди по рекламе после статьи. Там ты найдешь то, что ты искал, а нам бонус...


Почитать ещё:


Имя *:
Email:
Код *: