Často kladené otázky - Calc

From The Document Foundation Wiki
< Faq‎ | Calc
Jump to navigation Jump to search
This page is a translated version of the page Faq/Calc/Accuracy and the translation is 56% complete.
Other languages:
English • ‎dansk • ‎čeština


Problém s inherentní přesností

Calc, stejně jako většina ostatních tabulkových procesorů, používá matematické funkce s pohyblivou řádovou čárkou, dostupnou hardwarově. Vzhledem k tomu, že nejmodernější hardware používá aritmetiku s pohyblivou řádovou čárkou s omezenou přesností definovanou v 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, ale také o nic překvapivého, čemu by se dalo v současnosti vyhnout, aniž bychom museli používat složité softwarové výpočty, které by si kladly neúměrné požadavky na výkon, což je vyloučeno. Uživatelé s tím musejí počítat a podle potřeby použít zaokrouhlování a porovnání s epsilon.

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 viděli uvedený výsledek).

Due to the specific of time representation in Calc, this also applies to all calculations involving times. E.g., in the following example, the cells A1 and A2 show the date+time data as entered (in ISO 8601 format):

A
1 2020-04-13 12:18:00
2 2020-04-13 12:08:00
3 =A1-A2

Cell A3 will show 00:09:59.999999 instead of expected 00:10:00.000000 if formatted using [HH]:MM:SS.000000 format string. This happens despite only whole numbers of hours and minutes were used, because internally, any time is a fraction of a day, 12:00 (noon) being represented as 0.5. The data in A1 is represented internally as 43934.5125, and in A2 as 43934.5055555555591126903891563 (which is not exact representation of the entered datetime, which would be 43934.505555555555555555...). Their subtraction results in 0.00694444443287037, a value slightly less than expected 0.00694444444444..., which is 10 minutes.

See Also

Related bookmarks collected by erAck