Числовите грешки, можещи да доведат до катастрофа
Страница 1 от 1
Числовите грешки, можещи да доведат до катастрофа
Удивително елементарен компютърен проблем може да доведе до падане на самолети, загуба на космически апарати и т.н. Всъщност, вече е създавал сериозни проблеми.
4 юни 1996 за винаги ще бъде запомнен като тъмен ден за Европейската космическа агенция (ESA). Тогава е първият полет на безпилотната ракета "Ариана 5" на борда на която има четири скъпи научни сателита. Само след 39 секунди всичко свършва с експлозия. Загубите се оценяват на 370 милиона долара.
Разследването установява, че не става въпрос за механичен проблем или нарочен саботаж, всичко е по вина на "обичаен" софтуерен проблем. Компютърът се сблъсква с числова стойност твърде голяма за интерпретация. А този бъг тепърва ще създава още бели.
Самият проблем може лесно да се обясни. Представете си, че имате някакъв кръгъл циферблат на някакъв уред. Примерно скоростомер на автомобил. Той показва до определена скорост - примерно 160 км в час. Но какво става ако се стигне до по-голяма от тази скорост, примерно 165 км? Ако е напълно кръгъл циферблата, стрелката подминава 160 (което е и началната точка 0) и спира на 5. Тоест вместо 165 км, уреда показва само 5 км. В действителност днес скоростомерите не ги правят напълно кръгли и като стигне стрелката до края, просто си остава там, но това бе дадено само за пример - дали ще показва крайното 160 или ще превърти и ще показва 5, пак няма да е точната стойност.
Нещо такова се е случило с ракетата "Ариана 5" - появила се е стойност по-голяма от максимално възможната. В информатиката този проблем дори си има име - нарича се “integer overflow”.
По-задълбочените проверки установяват, че този софтуер е наследство от предишната версия на ракетата "Ариана 4". Новата ракета обаче се движи по-бързо и съответно датчиците са засекли по-голяма скорост, такава каквато не би се получила при четворката където не би имало проблем. Тази нова по-висока скорост е блокирала компютъра, който не е могъл да я запише в паметта си и всичко е гръмнало.
Предполага се, че нещо такова се е случило и през 2013 с апарата на НАСА " Deep Impact".
А преди няколко седмици се появи една стряскаща новина. Двигателите на самолетите "Boeing 787" може внезапно да се изключат (дори и да са в полет!), ако не са били изключвани в продължение на 248 дни. Федералната авиационна служба на САЩ не е дала детайли относно проблема, но обикновени хора са изчислили, че 248 дни се равнява точно на 2 147 483 647 сантисекунди (сантисекунда - една стотна от секундата, 1 сантисекунда = 10 милисекунди). А това число не е случайно, това е максималното число което може да се запише в "32-битов компютърен регистър". За сравнение на "Ариана 5" е имало 16-битов регистър, който може да побере само числа до 32 767.
Числата са безкрайни, защо тогава има такива лимити? Много просто - числата са безкрайни, но представянето им не е. Вземете един лист и започнете да пишете цифри в него, примерно нули и единици. Колкото и дребни да ги пишете, рано или късно ще запълните целия лист. За да продължите да пишете трябва да вземете втори лист. Така и компютърната памет е ограничена. Защо обаче не се презастраховат с огромен регистър за числа? Заради бързодействието. Да се върнем на примера с листовете хартия. Примерно ако сте писали предимно нули и ви се налага да намерите всички единици, много по-бързо ще ги намерите ако трябва да прегледате само един лист, отколкото 10 листа. Така е и при компютрите, изчисления с по-малки регистри стават по-бързо. А при ракетите от типа на "Ариана" бързината е критична, трябва максимално бързо да се смята. Затова именно целта е да се ползва максимално възможен малък регистър. И тук идва трудния момент - какъв да е размера, който хем да е достатъчно малък, хем да сме сигурни, че никога няма да бъде запълнен. За жалост често пъти това се установява по метода "проба-грешка".
През 1991, в първата война срещу Ирак в Персийския залив, една защитна ракетна система "Пейтриът" не успява правилно да прихване иракска ракета "Скъд" поради описания по-горе софтуерен проблем. В резултат е поразена казарма на американците и загиват 28 войници, други 98 са ранени.
За щастие не всички подобни случаи имат такива сериозни последици. Нещо подобно се е получило в първата игра от поредицата "Цивилизация". Описал съм го в тази статия:
Защо Ганди е такъв задник в поредицата "Цивилизация"
Миналия декември пък прословутия клип "Гангнам стайл" "счупи" брояча в YouTube като достигна 2 147 483 647 гледания. Просто някога когато програмистите са разработвали този видео сайт, дори не са си представяли, че някое клипче ще бъде гледано толкова много пъти. От компанията веднага коригираха размера на регистъра на 9 куинтилиона (10 с 30 нули след него).
Прословутият "Проблем 2000" от началото на столетието също в основата си е подобен проблем с достигане на лимит. Най-младите читатели може би не знаят, но имаше сериозни опасения, че големи беди ще се случат когато свърши 1999 и настъпи 2000 година. Проблемът идва от това, че в много програми за изписване на годината са се използвали само две цифри, примерно '89 е 1989, '96 е 1996. Как обаче щеше да бъде възприета новата двехилядна година? Като '00 което може да се "помисли" от компютрите за 1900 и съответно голяма каша да стане. За щастие не стана, до голяма степен благодарение и на това, че бяха взети редица мерки в предходните месеци преди настъпването на Нова година. Все пак имаше единични инциденти. Апаратура за измерване на радиация в Ишикава, Япония е спряла да работи в полунощ, няколко сайтове в интернет започват да показват датата като "1 януари 19100", а в щата Делауеър в САЩ 150 хазартни машини с монети блокират (горките комарджии, дори и на връх Нова година се занимават с прахосване на пари).
През 2012 пък жена от Швеция получава напомняне да се запише в предучилищната подготовка, само дето тя е на....105 години! Софтуерът, който е обработвал данните е работил с две цифри за година. Жената е родена през 1907, програмата обаче решила, че '07 идва от 2007 и и пратила известие.
На Нова година 2010 милиони дебитни и кредитни карти в Германия стават неизползваеми поради подобен проблем.
Очаква се следващият голям проблем свързан с датите в компютрите да възникне през 2038 година и то точно в 3 ч. 14 мин, и 7 секунди през нощта. Само да напомня - 3 през нощта е така нареченият "дяволски час", определено ще бъде интересно тогава
В споменатия час през 2038 се достига максималното число в секунди изминали от 1 януари 1970 г. В много (предимно стари) компютри и програми времето се отброява чрез изминалите секунди от тази въпросна дата. 2038 е след 23 години, колко от тази стара техника ще се ползва до тогава не е ясно.
И накрая за един малко по-различен компютърен проблем свързан с датите. За него вече съм писал, затова ще копирам отново новината:
Може би не сте запознати, но от време на време към някоя определена година се добавя по една секунда. Тази година е такава, и това ще е 26-тия път на добавяне на секунда от както е почнала практиката през 1972. Целта е да се компенсира забавянето на атомните часовници и времето показвано от тях да продължава да е в синхрон с Координираното Универсално Време (UTC). През тази година секундата ще се добави на 30 юни. И така когато часа стане 23:59:59 ще следва 23:59:60 и едва след това 00:00:00 на следващия ден. Предишния път на добавяне е бил през 2012 и това е предизвикало известни проблеми в интернет. Поради това мнозина настояват да се прекрати тази практика, дори чертаят страшни картини - за объркани парични транзакции или за полудели автоматични апарати и машини. Е, ще видим какво предстои.
Аз лично планирам на 30 юни да не си лягам до полунощ и да следя какво ще стане. Ако има интересни събития, ще ги отразя в моите блогове.
http://misterika.blogspot.com/2015/05/blog-post_18.html
4 юни 1996 за винаги ще бъде запомнен като тъмен ден за Европейската космическа агенция (ESA). Тогава е първият полет на безпилотната ракета "Ариана 5" на борда на която има четири скъпи научни сателита. Само след 39 секунди всичко свършва с експлозия. Загубите се оценяват на 370 милиона долара.
Разследването установява, че не става въпрос за механичен проблем или нарочен саботаж, всичко е по вина на "обичаен" софтуерен проблем. Компютърът се сблъсква с числова стойност твърде голяма за интерпретация. А този бъг тепърва ще създава още бели.
Самият проблем може лесно да се обясни. Представете си, че имате някакъв кръгъл циферблат на някакъв уред. Примерно скоростомер на автомобил. Той показва до определена скорост - примерно 160 км в час. Но какво става ако се стигне до по-голяма от тази скорост, примерно 165 км? Ако е напълно кръгъл циферблата, стрелката подминава 160 (което е и началната точка 0) и спира на 5. Тоест вместо 165 км, уреда показва само 5 км. В действителност днес скоростомерите не ги правят напълно кръгли и като стигне стрелката до края, просто си остава там, но това бе дадено само за пример - дали ще показва крайното 160 или ще превърти и ще показва 5, пак няма да е точната стойност.
Нещо такова се е случило с ракетата "Ариана 5" - появила се е стойност по-голяма от максимално възможната. В информатиката този проблем дори си има име - нарича се “integer overflow”.
По-задълбочените проверки установяват, че този софтуер е наследство от предишната версия на ракетата "Ариана 4". Новата ракета обаче се движи по-бързо и съответно датчиците са засекли по-голяма скорост, такава каквато не би се получила при четворката където не би имало проблем. Тази нова по-висока скорост е блокирала компютъра, който не е могъл да я запише в паметта си и всичко е гръмнало.
Предполага се, че нещо такова се е случило и през 2013 с апарата на НАСА " Deep Impact".
А преди няколко седмици се появи една стряскаща новина. Двигателите на самолетите "Boeing 787" може внезапно да се изключат (дори и да са в полет!), ако не са били изключвани в продължение на 248 дни. Федералната авиационна служба на САЩ не е дала детайли относно проблема, но обикновени хора са изчислили, че 248 дни се равнява точно на 2 147 483 647 сантисекунди (сантисекунда - една стотна от секундата, 1 сантисекунда = 10 милисекунди). А това число не е случайно, това е максималното число което може да се запише в "32-битов компютърен регистър". За сравнение на "Ариана 5" е имало 16-битов регистър, който може да побере само числа до 32 767.
Числата са безкрайни, защо тогава има такива лимити? Много просто - числата са безкрайни, но представянето им не е. Вземете един лист и започнете да пишете цифри в него, примерно нули и единици. Колкото и дребни да ги пишете, рано или късно ще запълните целия лист. За да продължите да пишете трябва да вземете втори лист. Така и компютърната памет е ограничена. Защо обаче не се презастраховат с огромен регистър за числа? Заради бързодействието. Да се върнем на примера с листовете хартия. Примерно ако сте писали предимно нули и ви се налага да намерите всички единици, много по-бързо ще ги намерите ако трябва да прегледате само един лист, отколкото 10 листа. Така е и при компютрите, изчисления с по-малки регистри стават по-бързо. А при ракетите от типа на "Ариана" бързината е критична, трябва максимално бързо да се смята. Затова именно целта е да се ползва максимално възможен малък регистър. И тук идва трудния момент - какъв да е размера, който хем да е достатъчно малък, хем да сме сигурни, че никога няма да бъде запълнен. За жалост често пъти това се установява по метода "проба-грешка".
През 1991, в първата война срещу Ирак в Персийския залив, една защитна ракетна система "Пейтриът" не успява правилно да прихване иракска ракета "Скъд" поради описания по-горе софтуерен проблем. В резултат е поразена казарма на американците и загиват 28 войници, други 98 са ранени.
За щастие не всички подобни случаи имат такива сериозни последици. Нещо подобно се е получило в първата игра от поредицата "Цивилизация". Описал съм го в тази статия:
Защо Ганди е такъв задник в поредицата "Цивилизация"
Миналия декември пък прословутия клип "Гангнам стайл" "счупи" брояча в YouTube като достигна 2 147 483 647 гледания. Просто някога когато програмистите са разработвали този видео сайт, дори не са си представяли, че някое клипче ще бъде гледано толкова много пъти. От компанията веднага коригираха размера на регистъра на 9 куинтилиона (10 с 30 нули след него).
Прословутият "Проблем 2000" от началото на столетието също в основата си е подобен проблем с достигане на лимит. Най-младите читатели може би не знаят, но имаше сериозни опасения, че големи беди ще се случат когато свърши 1999 и настъпи 2000 година. Проблемът идва от това, че в много програми за изписване на годината са се използвали само две цифри, примерно '89 е 1989, '96 е 1996. Как обаче щеше да бъде възприета новата двехилядна година? Като '00 което може да се "помисли" от компютрите за 1900 и съответно голяма каша да стане. За щастие не стана, до голяма степен благодарение и на това, че бяха взети редица мерки в предходните месеци преди настъпването на Нова година. Все пак имаше единични инциденти. Апаратура за измерване на радиация в Ишикава, Япония е спряла да работи в полунощ, няколко сайтове в интернет започват да показват датата като "1 януари 19100", а в щата Делауеър в САЩ 150 хазартни машини с монети блокират (горките комарджии, дори и на връх Нова година се занимават с прахосване на пари).
През 2012 пък жена от Швеция получава напомняне да се запише в предучилищната подготовка, само дето тя е на....105 години! Софтуерът, който е обработвал данните е работил с две цифри за година. Жената е родена през 1907, програмата обаче решила, че '07 идва от 2007 и и пратила известие.
На Нова година 2010 милиони дебитни и кредитни карти в Германия стават неизползваеми поради подобен проблем.
Очаква се следващият голям проблем свързан с датите в компютрите да възникне през 2038 година и то точно в 3 ч. 14 мин, и 7 секунди през нощта. Само да напомня - 3 през нощта е така нареченият "дяволски час", определено ще бъде интересно тогава
В споменатия час през 2038 се достига максималното число в секунди изминали от 1 януари 1970 г. В много (предимно стари) компютри и програми времето се отброява чрез изминалите секунди от тази въпросна дата. 2038 е след 23 години, колко от тази стара техника ще се ползва до тогава не е ясно.
И накрая за един малко по-различен компютърен проблем свързан с датите. За него вече съм писал, затова ще копирам отново новината:
Може би не сте запознати, но от време на време към някоя определена година се добавя по една секунда. Тази година е такава, и това ще е 26-тия път на добавяне на секунда от както е почнала практиката през 1972. Целта е да се компенсира забавянето на атомните часовници и времето показвано от тях да продължава да е в синхрон с Координираното Универсално Време (UTC). През тази година секундата ще се добави на 30 юни. И така когато часа стане 23:59:59 ще следва 23:59:60 и едва след това 00:00:00 на следващия ден. Предишния път на добавяне е бил през 2012 и това е предизвикало известни проблеми в интернет. Поради това мнозина настояват да се прекрати тази практика, дори чертаят страшни картини - за объркани парични транзакции или за полудели автоматични апарати и машини. Е, ще видим какво предстои.
Аз лично планирам на 30 юни да не си лягам до полунощ и да следя какво ще стане. Ако има интересни събития, ще ги отразя в моите блогове.
http://misterika.blogspot.com/2015/05/blog-post_18.html
Георги- Главния
- Posts : 1201
Join date : 10.04.2015
Страница 1 от 1
Права за този форум:
Не Можете да отговаряте на темите