Objavljeno: 6.5.2015 08:00

Prekoračitve obsega v zgodovini

Ta teden je v javnosti zaokrožila novica, da imajo nova Boeingova letala 787 Dreamliner hrošča, ki bi lahko v izjemno redkem spletu okoliščin povzročil izgubo električne energije. Razlog je prekoračitev obsega števil, ki jih lahko shranimo v predznačeno 32-bitno celoštevilsko spremenljivko. Problem ni nov niti redek, razkriva BBC-jev pregled.

Če prvo mesto rezerviramo za predznak, lahko v tovrstno spremenljivko shranimo največ 2.147.483.647, kar je ravno 231-1. Prištejemo ena, pa se ponovno znajdemo na začetku, saj števec preteče obseg; podobno, kot bi avtomobilski pokazal 000000, če bi prevozili milijon kilometrov.

Dandanes zaradi nepazljivosti, včasih pa so se tovrstne pomanjkljivosti v kodo prikradle, ker nihče ni realistično mogel pričakovati, da bodo tako velika števila potrebna. Posledice so včasih zabavne, drugič pa katastrofalne.

Raketa Ariane 5, ki jo je Evropska vesoljska agencija (ESA) prvikrat poizkusno izstrelila 4. junija 1996, se je po 37 sekundah uničila. Razlog je bil recikliran kos programske kode iz Ariane 4, ki je zmogel shranjevati največ 16-bitna cela števila. Pri pretvarjanju 64-bitnih števil s plavajočo vejico v 16-bitno predznačeno celo število je prišlo do prekoračitve obsega. Vrsta nesrečnih odločitev pri dizajnu je povzročila, da je ta dogodek sprožil kaskado napak, ki je vodila do uničenja rakete.

Precej manj katastrofalen je števec ogledov na YouTubu, ki je bil svoj čas prav tako omejen na 32 bitov. Da to ne zadostuje, je pokazal korejski glasbenik Psy, čigar hit Gagnam Style je dobil več kot 2.147.483.647 ogledov. YouTube je napako hitro popravil, stranski učinek pa je bila še večja reklama tako za Psyja kakor YouTube.

Zloglasni hrošč Y2K, ki v resnici sploh ni povzročil tako hudih težav, kot so bili napovedovali, je podoben, a ne povsem enake provenience. Enako težavo pa bo povzročil problem leta 2038, ko bo Unixov čas – ki od 1. januarja 1970 ob 00:00:00 UTC enakomerno teče – presegel vrednost 2.147.483.647 sekund. To se bo zgodilo 19. januarja 2038 ob 03:14:07 UTC. Medtem ko 64-bitni sistemi že uporabljajo predznačeno 64-bitno celoštevilsko spremenljivko za time_t, je v 32-bitnih sistemih rešitev teže najti, če ne želimo žrtvovati združljivosti z obstoječimi sistemi.

Najbolj katastrofalna napaka pa je bila napačna pot vojaške rakete Patriot 25. februarja 1991 v zalivski vojni, ki je nastala kot posledica malomarne obravnave števil. Raketa ni zadela iraške rakete Scud, ki je zato padla na ameriško vojašnico in terjala 28 žrtev ter poškodovala več kot 100 ljudi. Tu ni šlo za prekoračitev obsega, ampak nepravilno zaokroževanje. Števila, shranjena s plavajočo vejico v dvojiškem sistemu, imajo omejeno natančnost, zato je treba paziti, da ne kopičimo numeričnih napak pri računih. 

Vrednosti 0,01 ne moremo natančno zapisati v dvojiškem sistemu, ker ima periodo. Nekje je torej treba odrezati, kar pri naivni uporabi aritmetike števil s plavajočo vejico prinaša numerične napake. Zato v programiranju 0,3 + 0,6 ni enako 0,9, temveč 0,89999999999999991 (odvisno seveda od števila bitov). Kje je to pomembno v vsakdanjem življenju? Na blagajnah, pri transakcijskih računih itd. Tam programska oprema vrednosti ne sme zapisovati v spremenljivkah s plavajočo vejico, temveč kot cela števila, ki predstavljajo večkratnike centov (ali desetink, stotink ... centov).

Več novic

Naroči se na redna tedenska ali mesečna obvestila o novih prispevkih na naši spletni strani!

Komentirajo lahko le prijavljeni uporabniki

Najbolj brano

  • Podjetja nočejo Copilota, ker zaposleni raje uporabljajo ChatGPT

    Microsoft kljub velikim naporom (beri: finančnemu vložku) podjetjem težko proda storitve umetne inteligence Copilot.

    Objavljeno: 27.6.2025 09:00
  • Android vam bo povedal, ali vam policija prisluškuje

    Čedalje popularnejši način prisluškovanja in prestrezanja podatkov z mobilnih telefonov je uporaba lažnih baznih postaj (IMSI catcher), ki jih imajo organi pregona v nekaterih državah, lahko pa tudi drugi akterji. Na takšno napravo se povežejo vsi telefoni v okolici, saj njen signal preglasi legitimne bazne postaje, upravljavec pa potem zlahka prestreza komunikacijo. Uporabnik tega početja praktično ne more zaznati.

    Objavljeno: 1.7.2025 07:00
  • Kitajski prenosniki so dve leti za zahodnimi

    Čeprav se Kitajci močno trudijo in izdatno investirajo v domači razvoj in proizvodnjo čipov, so še vedno vsaj dve generaciji za zahodnimi izdelki. To izkazuje tudi najnovejši Huaweijev prenosnik MateBook Fold Ultimate, ki poganja lastni HarmonyOS in ima same kitajske komponente. A te v primerjavi z zahodnimi zaostajajo.

    Objavljeno: 25.6.2025 07:00
  • Pametna očala s samodejnim ostrenjem bi lahko nadomestila bifokalna stekla

    Finsko podjetje IXI razvija inovativna očala z lečami, ki se samodejno ostrijo glede na pogled uporabnika. 

    Objavljeno: 23.6.2025 10:00 | Teme: pametna očala
  • Teslini samovozeči taksiji ne znajo voziti

    Prvi dnevi Teslinih robotskih taksijev so polni napak, vožnje po napačni strani ceste, nenadnih zaviranj in nevarnih ustavljanj za odlaganje potnikov.

    Objavljeno: 26.6.2025 09:00
  • HDMI 2.2 je tu!

    Sicer na papirju, a vendarle. HDMI Forum je izdal končne specifikacije standarda HDMI 2.2, ki so ga izdatno opisovali in predstavljali že na januarskem sejmu CES. HDMI 2.2 ima že večjo prepustnost kot DisplayPort, a bo zanjo zahteval nove kable Ultra96.

    Objavljeno: 27.6.2025 05:00
 
  • Polja označena z * je potrebno obvezno izpolniti
  • Pošlji