Nejčastější dotazy/Calc/Přesnost

    From The Document Foundation Wiki
    < Faq‎ | Calc
    This page is a translated version of the page Faq/Calc/Accuracy and the translation is 75% complete.
    Other languages:


    Inherentní problém s přesností

    Calc, stejně jako většina ostatních tabulkových procesorů, používá na hardwaru závisející možnosti výpočtů s plovoucí řádovou čárkou. Vzhledem k tomu, že většina moderního hardwaru využívá binární aritmetiku s plovoucí řádovou čárkou s omezenou přesností definovanou standardem IEEE 754, nelze v programu Calc přesně vyjádřit mnoho desetinných čísel - včetně tak jednoduchých jako 0,1 (Calc interně používá 64bitová čísla s dvojitou přesností). Výpočty s těmito čísly [1] nutně vedou k chybám zaokrouhlování a ty se při každém výpočtu 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:

    A
    1 31000.99
    2 32000.12
    3 =A1-A2

    Výsledkem bude -999,129999999997 v 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).

    Vzhledem ke specifickému způsobu reprezentace času v programu Calc 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

    Buňka A3 zobrazí 00:09:59.999999 místo očekávaného 00:10:00.000000, pokud je formátována pomocí formátovacího řetězce [HH]:MM:SS.000000. 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 A1 jsou interně reprezentována jako 43934.5125 a v A2 jako 43934,5055555555591126903891563 (což není přesná reprezentace zadaného data, které by bylo 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.

    Order of magnitude between operands

    The maximum order of magnitude between operands is lower than 10^15 (1015). This is not related to the display format for the cell.

    For instance, when performing 1E+9 + 1E-7 you might not get the result you are expecting, since 9 - (-7) = 16 > 15. On the other hand, performing 1E+8 + 1E-6 will indeed result in 100000000.000001 (you might need to increase shown decimal places in cell format to see this).

    Viz také

    Související záložky shromážděné erAck