Star InactiveStar InactiveStar InactiveStar InactiveStar Inactive
 

Kompiuteris nemoka skaičiuotiNors kompiuteriai (angl. compute - skaičiuoti) atrodytų yra sukurti skaičiavimo užduotims atlikti, iš tiesų tiksliai skaičiuoti jie dažnai nemoka. Ir algebros dėstytojo anekdotas - du plius du yra lygu penkiems, esant labai didelėms dviejų reikšmėms, kaip niekada tinka kompiuteriams. Todėl, prireikus rimtų skaičiavimų, nuo kurių gali priklausyti daugiau, nei rungtynių rezultatas švieslentėje ar suma kasos čekyje, kompiuterio patikimumą reikėtų vertinti atsargiau.

Ypač jei nuo šių skaičiavimų priklausys kieno nors gyvybė. Tuo paskutinėmis Persijos įlankos karo dienomis įsitikino JAV kariškiai. „Patriot“ priešraketinės gynybos sistemos kompiuteris laiką matuoja 0,1 sekundės intervalais, kurie sumuojasi nuo sistemos įkrovos. Tačiau dėl skaičiavimo paklaidos,  kompiuterio skaičiuojami intervalai yra šiek tiek kitokios trukmės, nei 0,1 sekundės. Taigi, po 100 darbo valandų suminė paklaida sudarė 0,3433 sekundės. Per šį laiko tarpą Irako „Scud“ raketa nuskrieja maždaug 680 metrų, „Patriot“ radaras ją pražiopso ir šios aritmetikos sumoje gauname 28 lavonus bei 100 sužeistųjų.

Kaip tai nutiko? Elementaru - kompiuteriai iš principo nemoka tiksliai skaičiuoti dešimtaine skaičiavimo sistema, ypač atlikti veiksmų su trupmeniniais skaičiais.

Problema ta, kad kompiuteriai viską skaičiuoja dvejetaine sistema ir dešimtainius skaičius reikia pasiversti dvejetainiais. Štai čia ir kyla problema - dideli skaičiai paprasčiausiai netilpdavo į senesnių kompiuterių procesorių registrus. Problema kiek atsitraukė, nes į 64 bitų procesorių registrus jau telpa skaičiai iki +/- 9223372036854775808. Tačiau su 32 bitų registrais, kuriuos iki šiol naudojo dauguma kompiuterių, rezultatas yra kur kas kuklesnis, nes tuomet galima skaičiuoti tik iki +/- 2147483648. 

Todėl skaičiavimams didesniais skaičiais teko sugalvoti gudrius perkodavimo algoritmus. Ir kaip nurodoma „Techradar“ straipsnyje, dalis jų yra apytiksliai. Ši paklaida yra nedidelė, tačiau jei apie ją yra pamirštama ir jos neįvertinama - rezultatai būna apgailėtini. 

O tai, kad apie šias paklaidas programuotojai dažnai pamiršta arba netgi nežino - akivaizdžiai rodo faktai. Pabandykite „Google“ skaičiuoklėje suskaičiuoti 599 999 999 999 999 - 599 999 999 999 998. Lietuvos ir ne tik buhalterių taip pamėgta „Microsoft Excel“ ne visuomet susitvarko net ir su mažesniais skaičiais. Kai kuriose versijose formulės =850*77.1 rezultatas yra ne 65 535, o 100 000.

Tai ne procesoriaus darbo klaidos, tokios, kaip pirmųjų „Pentium“ FDIV klaida, dėl kurios kompanija buvo priversta pakeisti procesorius. Tai normalus kompiuterių darbas, nes tokia yra kompiuterių architektūra ir su tuo reikia skaitytis.  

Komentuoti


Apsaugos kodas
Atnaujinti