Kas yra aritmetinis perpildymas?

Aritmetinis perpildymas yra būsena, atsirandanti kompiuteriuose, ypač kompiuterių programavimo srityje, kai skaičiavimo ar operacijos rezultatas yra per didelis, kad saugojimo sistema ar registras galėtų jį apdoroti. Perpildymas taip pat gali reikšti sumą, kai pateiktas rezultatas viršija saugojimui skirtą atmintį. Kai kuriais atvejais duomenų perteklius gali būti saugomas kitoje duomenų saugojimo vietoje; kitose programose gali sugesti, lėtai veikti arba gauti netikslių rezultatų. Aritmetinis perpildymas neapsiriboja visais asmeniniais ar verslo kompiuteriais, nes paprasti delniniai skaičiuotuvai ir ryšio įrenginiai taip pat turi ribotas verčių, kurias gali apdoroti, dydis.

Programuotojai yra linkę išmokti kovos su aritmetinėmis perpildymo klaidomis metodus ankstyvame mokymosi etape, nes dažniausiai tai yra labai dažnos programavimo klaidos. Yra daug skirtingų aritmetinio perpildymo metodų. Programos dizainas vaidina labai svarbų vaidmenį; gerai suprojektuota programa, kuri naudoja nuoseklius ir teisingus duomenų tipus ir ilgius, neturėtų patirti tokių klaidų. Jei labai atidžiai tikrinsite operacijų tvarką ir viską nuosekliai, perpildymo klaidų galima visiškai išvengti.

Kitas būdas susidoroti su aritmetinėmis perpildymo klaidomis yra suskaidyti operacijas į mažesnius žingsnius. Sistemai dažnai lengviau atlikti paprastas, mažas operacijas nei sudėtingas operacijas, susijusias su dideliais skaičiais ir pernelyg dideliais skaičiavimais. Kai nėra itin svarbu, kad grąžintas skaičius būtų visiškai tikslus, kartais užteks programą parašyti taip, kad ji praneštų vartotojui apie perpildymo klaidą, bet vis tiek grąžintų reikšmę. Dažniausias būdas tvarkyti aritmetinę perpildymo klaidą yra visiškai jos nepaisyti. Nors tai paprastai yra nekenksminga, tai gali duoti neteisingus rezultatus ir pakenkti programos naudingumui ir efektyvumui.

Ariane 5 skrydis 501 aiškiai parodo aritmetinių perpildymo klaidų pavojų. Šis skrydis buvo pirmasis bandomasis Europos Ariane 5 paleidimo sistemos, kurioje buvo pakartotinai panaudota daug kodo iš senosios Ariane 4 sistemos, bandymas. Tačiau „Ariane 5“ pagreitis buvo žymiai didesnis nei „Ariane 4“, o programavimas nebuvo tinkamas norint valdyti reikalingas didesnes vertes. Taigi raketa paliko numatytą skrydžio trajektoriją praėjus 37 sekundėms po paleidimo ir turėjo būti sunaikinta. Ši paprasta programavimo klaida kainavo šimtus milijonų JAV dolerių.