Nápověda LibreOfficeDev 7.6
LibreOfficeDev Calc, stejně jako většina ostatních tabulkových procesorů, používá na hardwaru závisející možnosti výpočtů s čísly s plovoucí desetinou čárkou. Většina moderního hardwaru využívá binární aritmetiku s plovoucí desetinnou čárkou s omezenou přesností definovanou standardem IEEE 754, nelze v aplikaci LibreOfficeDev Calc (která interně používá 64bitová čísla s dvojitou přesností) přesně vyjádřit mnoho desetinných čísel, včetně tak jednoduchých jako například 0,1.
Výpočty s těmito čísly nutně vedou k chybám zaokrouhlování a ty se při výpočtech hromadí.
Nejedná se o chybu softwaru ani o nic neočekávaného, čemu by se dalo v současnosti vyhnout, aniž bychom museli používat složité softwarové výpočty, které by si kladly nepřijatelně neúměrné nároky na výkon. Je třeba, aby s tímto chováním uživatelé počítali a v případě nutnosti používali zaokrouhlování nebo porovnání s hodnotou epsilon, vyjadřující relativní velikost chyby.
Příklad s čísly:
| A | |
|---|---|
| 1 | 31000.99 | 
| 2 | 32000.12 | 
| 3 | =A1-A2 | 
Výsledkem bude -999,129999999997 v buňce A3 namísto očekávaných -999,13 (možná budete muset zvýšit počet zobrazených desetinných míst ve formátu buňky, abyste uvedený výsledek uviděli).
Příklad s daty a časy:
Vzhledem ke specifickému způsobu reprezentace času v Calcu to platí i pro všechny výpočty zahrnující časy. Např. v následujícím příkladu se v buňkách A1 a A2 zobrazují údaje o datu a čase tak, jak byly zadány (ve formátu ISO 8601):
| A | |
|---|---|
| 1 | 2020-04-13 12:18:00 | 
| 2 | 2020-04-13 12:08:00 | 
| 3 | =A1-A2 | 
Pokud je na buňku A3 použito výchozí formátování [HH]:MM:SS, zobrazí se v ní 00:10:00. Jestliže je však použit formátovací řetězec [HH]:MM:SS.000000, místo očekávané hodnoty 00:10:00.000000 se zobrazí 00:09:59.999999. K tomu dochází přesto, že byla použita pouze celá čísla hodin a minut, protože interně je jakýkoli čas zlomkem dne, přičemž 12:00 (poledne) je reprezentováno jako 0,5.
Data v buňkách jsou interně reprezentována jako 43934,5125 v A1 a jako 43934,5055555555591126903891563 v A2 (což není přesná reprezentace zadaného data, ta by byla 43934,505555555555555555555555...).
Výsledkem jejich odečtení je 0,006944443287037, což je hodnota o něco menší než očekávaných 0,006944444444..., představujících 10 minut.