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

  • V ZDA bodo retroaktivno prepovedali DJI-jeve letalnike

    Ameriška Zvezna komisija za telekomunikacija (FCC) je sprejela sila nenavadno odločitev in za nazaj prepovedala uporabo naprav, ki jih je že odobrila in sprostila njihov uvoz v ZDA. Odločitev, da to smejo storiti, so sprejeli s tremi glasovi za in nobenim proti. Uperjena je proti kitajskemu proizvajalcu letalnikov DJI.

    Objavljeno: 3.11.2025 07:00
  • Microsoft pokazal Windows 11 26H1, ki na običajnih računalnikih ne bo deloval

    Verzija Windows 11, ki bo izšla prihodnje leto, se bo predvidljivo imenovala Windows 11 26H1, a je zelo verjetno ne bomo mogli uporabljati. Na kanalu Canary v programu Insider Preview se je predogledna izdaja (Build 28000) pojavila te dni, kar naznanja začetek nekoliko bolj javnega testiranja. Zdi pa se, da bo omejena na ARM-jeve procesorje.

    Objavljeno: 11.11.2025 05:00
  • Umetno inteligentni brskalniki prikažejo plačljive vsebine zastonj!

    Nekateri novi brskalniki, ki temeljijo na umetni inteligenci, lahko zaobidejo plačljive mehanizme medijskih vsebin. 

    Objavljeno: 4.11.2025 16:00
  • Microsoft zakrpal hrošča: Windows 10 in 11 se končno znata ugasniti

    V najnovejši verziji popravkov za Windows 10 in 11 je Microsoft po več kot desetletju zakrpal hrošča, ki je marsikoga spravljal v dvome, ali njegov spomin še deluje. Če ste po uporabi Windows Update želeli računalnik ugasniti in ste izbrali Update and shut down, se je računalnik z Windows 10 ali 11 nemalokrat ponovno zagnal. Verjetno ste pomislili, da ste pomotoma kliknili Update and restart.

    Objavljeno: 4.11.2025 05:00
  • Kdo bo Python rešil pred smrtjo?

    Fundacija Python, ki skrbi za razvoj izjemno popularnega istoimenskega programskega jezika, je zavrnila 1,5 milijona dolarjev vredno finančno podporo Nacionalne znanstvene fundacije (NSF), ker jo je pogojevala z opustitvijo vseh programov raznolikosti, enakopravnosti in vključenosti (DEI). Namesto tega zato zbirajo donacije, kjer jim gre presenetljivo dobro.

    Objavljeno: 11.11.2025 07:00
  • Brezplačni »Photoshop«

    Zbirka grafičnih orodij Affinity, ki je doslej stala do 70 evrov na posamezno aplikacijo, je po novem zastonj.

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