![Přidat aktualitu mezi oblíbené Přidat aktualitu mezi oblíbené](https://static.poradna.net/images/post/action/favorite.png)
Hrubá chyba při počítání v Excelu 2007
V Excelu 2007 byla objevena významná chyba výpočtů. Nejde o žádné chybné zaokrouhlování v desetinných místech, snadno dostanete Excel do úzkých, kdy se sekne o desítky tisíc. Zkuste si to sami. Zdá se, že má Excel velké problémy s čísly, které se velmi blíží číslu 65 535.http://www.zive.cz/Bleskovky/Hruba-chyba-pri-pocita ni-v-Excelu-2007/sr-1-sc-4-a-138300/default.aspx
A zkuste si v Excelu (i ve starších verzích než 2007) zadat do nějaké buňky číslo
40000,223
A nebo obecněji určeno, zkuste zadat číslo v intervalu (32768 - 65536) které má desetinnou část z této množiny{.098, .223, .348, .473, .598, .723, .848, .973}
Pak se podívejte do řádku vzorců - Excel vaše zadání nenechá jen tak...
A Microsoft o tom ví, nicméně přiznává chybu jen u čísel končících na .848![:))](https://static.poradna.net/images/smiley/biggersmile.gif)
http://support.microsoft.com/default.aspx?scid=kb;e n-us;Q161234
A i když je tato chyba na webu Microsoftu popsána už od r. 2005, stále se objevuje v Excelu 2007. Asi je neodstranitelná![:-D](https://static.poradna.net/images/smiley/bigsmile.gif)
Je odstranitelná.![;-)](https://static.poradna.net/images/smiley/wink.gif)
![8-)](https://static.poradna.net/images/smiley/smoke.gif)
Nápad na workaround.![:beer:](https://static.poradna.net/images/smiley/beer.gif)
Až uživatel skončí práci na tabulce v Excelu, uloží a otevře ji v OpenOffice Calc. Zkontroluje, zda se oba kancelářské balíky na finálních výsledcích alespoň přibližně shodují...
Postupem času první krok s Excelem odpadne a uživatel si vystačí jen s Oo
ok. nechcem sem tahat ziaden win vs. unix flamewar, ale:
to je to iste ako si mysliet, ze ludia prejdu na nejaky Linux, lebo v nom maju vsetko, co vo Win.
Já si nic o přechodu na Linux nebo Oo nemyslím. Možná jsem měl u posledního odstavce použít tři smajlíky nebo něco podobného, neboť je myšlen spíš sarkasticky a odlehčeně.
Nerad řeším zbytečné problémy a snažím se pracovat produktivně, proto Linux ani Oo osobně nepoužívám.
Oukej![:))](https://static.poradna.net/images/smiley/biggersmile.gif)
Oo=záchod?![:-D](https://static.poradna.net/images/smiley/bigsmile.gif)
Hmmm. Kde je Vladimir?![:-x](https://static.poradna.net/images/smiley/silence.gif)
Sedí v koutku se staženýma ušima a přemýšlí, jak obhájit M$...
(sorry Vláďo)
Ať už Vladimir vymyslí cokoliv, tohle je ostuda jako prase. Program s takovou chybou, bych se styděl odevzdat, třeba jako domácí úkol na střední škole, a né ho prodávat za X tisíc korun.
Kam ten svět spěje...![:-|](https://static.poradna.net/images/smiley/neutral.gif)
Aj toto prehrmi a Excel bude pouzivat dalej tak isto vela pouzivatelov Windowsov, ako doteraz. Darmo sa tu pride hockto vzrusovat, ci sa mylim?![3-[](https://static.poradna.net/images/smiley/mad.gif)
Kazdy mame navic moznost volby - kdo kvuli teto chybe nemuze usnout a chce navic usetrit, muze prejit...
Excel je tabulkový procesor, ne domácí úkol.
Mě osobně tyto jevy neudivují.
A co jako? Tenhle arugment mi nedává smysl. To, že v M$ neumí naprogramovat dobře ani násobení, které navíc v dřívějších verzích Excelu fungovalo dobře, je na pováženou...
Třeba se na to jednou budeš dívat jinak.
Kdosi tady měl v podpisu heslo, které znělo nějak takhle:
Poslední chyba v programu je ve skutečnosti předposlední.
A podobné...
V aplikaci, která má desetitisíce programových řádků se přehlídneš velice snadno.
Právěže takováto chyba se hledá velice blbě.
Program si lze vlastně představit jako deterministický systém do kterého ti leze určitý počet (v tomto případě) dynamických vstupů:
Počet těchto vstupů je prakticky neomezený. A oni si to při vývoji vyzkoušejí třeba na
náhodném vzorku 10 000 vstupů a ty zrovna sedí (jsou OK).
Proto se taková chyba odhaluje extrémně špatně.
Průser to je bezpochyby, ale je tu zásadní rozdíl:
Excel je tabulkový procesor, ne domácí úkol.
Doufám, že to takhle nezačnou testovat třeba výrobci letadel... To raději bubu chodit pěsky.
Hmmm. Jenomže problém je v tom, že počítač dělá pouze to co mu řekneš.
.
Počítač neví jestli to co dělá je správné nebo špatné.
A když máš (prakticky) nekonečný počet hodnot na zpracování tak tady není nekonečno lidí a nebo člověk s nekonečným časem
Kromě toho je tady milión dalších věcí. Například nestačí totálně doprasit nějaký prográmek tak, aby fungoval.
Je potřeba také algoritmy optimalizovat, aby zabíraly pokud možno co nejmenší čas.
Aby tam nebyly tzv. memory-leaky (úniky paměti)...
Když tohle všechno a další věci doděláš přehlídneš chybu velice snadno.![:-)](https://static.poradna.net/images/smiley/smile.gif)
Tohle myslíš vážně? Tady nemůže jít o nějakou fuzzy logiku, kdy si vyzkouším, že "zhruba to funguje", nebo "tento vzorek dat dává správný výstupy". Tady jde přece o výpočet (s jistou mírou přesnosti, danou reprezentací čísel ve dvojkové soustavě). Pokud chybu neudělá procesor, pak je to evidentně podivná/záhadná chyba programátora(ů), kterej provádí s výpočtem cosi nestandardního. Normální kalkulačka ti takovou chybu neudělá, tahle verze Excelu jo. Sám si to nedokážu vysvětlit, na podtečení/přetečení to nevypadá...
Pavel
Přesně.
Jak Squad_leader sám dvakrát zopakoval, Excel je především tabulkový kalkulátor (procesor), a tak by měl umět správně počítat. Tady žádná obhajoba M$ ani nemůže existovat...
Klidně si pokusím zaspekulovat. Problém se údajně týká hodnot, které se pohybují okolo čísla 65 535.
Když se podíváme tak přesně této hodnotě odpovidá typ unsigned short int.
Například je možné, že program si interně přetypovává hodnoty tak, aby přesnost a zabraná paměť byla optimální.
(Excel je navržen pro velké datové bloky). A právě při daném přetypovávání na této mezní hodnotě se provede
chybná volba.
Sám používám (z donucení) Excel 2003 takže nevím, protože mě to funguje správně.
//Edit
Neobhajuji nikoho a M$ už teprve ne.
No raději tady ten odkaz ještě dám:
http://en.wikipedia.org/wiki/Floating_point#Range_o f_floating_point_numbers
Jsem tady
Já bych se program jako Excel, i s takovou chybou v žádném případě nestyděl odevzdat, protože bych v životě něco tak složitého nevytvořil.
OK tak čekaná apologetika: MS Excel i s tou chybou běží a počítá rychleji než Open Office... ok bad joke.![;-)](https://static.poradna.net/images/smiley/wink.gif)
To bys ani nemohl, protože takhle složitý prohram snad ani nemůže vyvinout jeden člověk sám. Narážka na OO je opravdu bad joke, protože k čemu mi je rychlost, když program místo výsledků jednoduchého násobení vyhazuje hausnumera...![:))](https://static.poradna.net/images/smiley/biggersmile.gif)
Fakt je nejlepší auto, které jede nejrychleji, ale občas jede jinam, než potřebuji?
Pokud se chybová hláška objevuje, je to předpokládaný stav.
Horší ovšem je pokud se neobjevuje vůbec.
Tady:
http://groups.google.com/group/microsoft.public.exc el/browse_thread/thread/4e6aff0d1290f21c?hl=en
se řeší všechny další, s tímto svázané, chyby.
)
(Safra, kde já jen nechal to kalkulačku z Asie, ta umí alespoň počítat
Pravděpodobnost nalezení chyby v Oo je menší tolikrát, kolikrát méně uživatelů jej používá. Pro Oo ale mluví otevřený zdroják, ve zdrojáku se totiž chyba hledá lépe, než pouhým testingem (u takle složitýho softwaru). Nicméně bych netvrdil, že je Oo bez chyby a MS Office jich tam má hodně.
Průser je jiná věc - tohle se ani nemělo dostat ven z MS, natož aby to prošlo rukama solidních betatesterů. Jenže ono to vyšlo najevo víc jak rok od veřejné Bety. Za tohle by někdo letěl, ať už je to problém plovoucí čárky, dvojkové soustavy, šulení s pamětí, zaokrouhlování nebo bůhvíčeho ještě. A neodskákal by si to programátor, který je na konci řetězce, ale ti blbečci z managementu a marketingu, kteří tlačí na to, aby to bylo rychle. Tady je evidentní, jak se přeskakují vývojová stadia softwaru. Podle mě je to typická ukázka toho, jak se nedělají testy na okrajové podmínky.
Takže rok to nikdo nezjistil a ti blbci by měli letět.![:-D](https://static.poradna.net/images/smiley/bigsmile.gif)
Reakce MS byla vskutku pohotová