Excel really excels!
Imate najnovejši Microsoft Excel 2007? Vpišite tole enačbo v celico: =850*77,1.
Ste dobili kot rezultat 100,000? No, narobe. Pravilen rezultat je 65535.
Saj vem, bug pri katerem bi se marsikdo posral ali pa poscal od smeha. Le kako jih je to uspelo. Zadnje čase se precej ukvarjam z ‘hardcode’ kodiranjem. Premetavam bite sem ter tja, jih premikam levo in desno, se odločam ali bom nekaj castal v unsigned int ali v unsigned char. Zato se mi zdi odgovor na to, kako jim je to uspelo sila preprost, hkrati pa precej zaskrbljujoč.
MS Excel za prikaz števil uporablja primarno 16 bitne spremenljivke, morda tudi manjse pri manjsih vrednostih, kdo ve. Med računanjem je prišlo do precej neljubega dogodka, da je Excel pri izračunu neke formule narobe preklopil iz 16 bitnega načina v 32 bitni način. Morda je naključje, da je 100000 binarno ravno 32. In da je en 16 bitni floating point rezultat v bistvu 32 bitni ((vsaj zdi se mi, verjetno tudi odvisno od tega kak je precision)). Nekje je nekaj odletelo out-of-bounds in exception handler tega ni odpravil tako kot treba. Pri predpostavki, da je vse skupaj pisano v C++ in dejansko imajo exception handler.
Tisti bolj zaskrbljujoč del cele zadeve je to, da so v novem Office paketu šli popravljati samo jedro Excela, tisti del, ki opravlja izračune. Takle šolski primer napake, bi se enostavno moral preveriti ob avtomatskem unit testu in razvijalec bi dobil obvestilo o napaki izpisano z velikimi ampak nič kaj prijaznimi črkami.
Poleg vsega skupaj pa se človek vpraša, kje vse se Excell še zmoti? 🙂
One thought on “Excel really excels!”
Joel Spolsky: Explaining the Excel Bug
http://www.joelonsoftware.com/items/2007/09/26b.html
Comments are closed.